2013-04-04 55 views
5

Đây là lần đầu tiên tôi hỏi bất kỳ câu hỏi nào để tha thứ cho tôi vì bất kỳ sai lầm nào của tôi.Thực hiện chức năng Traceroute trong android

Tôi muốn triển khai chức năng theo dõi như ứng dụng này có sẵn trong cửa hàng trò chơi Android.

Visual TracertPro

Traceroute

Tôi biết rằng khi gõ vào CMD trong cửa sổ traceroute google.com sẽ hiển thị tất cả các IP trung gian sử dụng.

Bây giờ những gì tôi đã thử.

Tôi thử sử dụng traceroute lệnh nhưng Android không hỗ trợ traceroute chỉ thiết bị gốc hỗ trợ nó.

Process process =Runtime.getRuntime().exec("traceroute yahoo.com"); 
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
int i; 
char[] buffer = new char[4096]; 
StringBuffer output = new StringBuffer(); 
while ((i = reader.read(buffer)) > 0) 
    output.append(buffer, 0, i); 
reader.close(); 
Log.d("*************", ""+output); 

Vì vậy, tôi nghĩ rằng để đạt được cách sử dụng lệnh ping nhưng không thể nhận được bất kỳ success.By sử dụng lệnh ping nó chỉ cung cấp cho IP của google.com không như tôi cần và trên các ứng dụng hiển thị.

Process process = Runtime.getRuntime().exec("/system/bin/ping -t 1 -c 1 google.com"); 

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
int i; 
char[] buffer = new char[4096]; 
StringBuffer output = new StringBuffer(); 
while ((i = reader.read(buffer)) > 0) 
    output.append(buffer, 0, i); 
reader.close(); 
Log.d("*************", ""+output); 

Vui lòng hướng dẫn tôi cách thực hiện điều này. Một số liên kết hoặc một số hướng dẫn sẽ rất hữu ích.

Cảm ơn bạn trước.

+4

Bài đăng đầu tiên tốt! Nó luôn luôn làm cho tôi hạnh phúc khi bài viết đầu tiên của người dùng có loại chất lượng. – amccormack

Trả lời

4

Tiện ích busybox bao gồm traceroute. Bạn có thể chạy busybox trên thiết bị của bạn mà không cần root điện thoại của bạn bằng cách làm theo đây youtube tutorial. Sau đó, bạn có thể sử dụng phân đoạn mã đầu tiên bạn đã đăng để truy vấn traceroute từ bên trong ứng dụng của bạn. Tất nhiên, bạn sẽ cần phải chắc chắn rằng bạn sử dụng đường dẫn chính xác khi gọi traceroute.

+0

Tôi chỉ xem video trong đó thiết bị của anh ấy được kết nối với máy tính và anh ấy đang sử dụng lệnh nhưng nếu tôi muốn tạo ứng dụng và muốn người dùng không làm gì như thế thì tôi có thể đạt được điều đó như thế nào. Nếu bạn biết bạn có thể cung cấp một số mã để tôi có thể hiểu được nó. –

+0

@MusicBlues Bạn có thể bao gồm busybox làm tài sản trong ứng dụng của mình, sau đó cài đặt nó thay mặt người dùng. Nhận xét không phải là nơi tốt nhất để giải thích điều này, vì vậy bạn nên thử hỏi thêm một câu hỏi. – amccormack

+0

Kiểm tra liên kết câu hỏi mới của tôi và trợ giúp nếu có thể cho bạn. http://stackoverflow.com/questions/15827492/how-to-add-busybox-and-implement-traceroute-functionality-in-android –

1

Traceroute hoạt động bằng cách gửi 3 tin nhắn ICMP qua UDP tới số cổng không chắc, bắt đầu hẹn giờ mỗi lần và đặt TTL trong datagram thành 1 (max 1 hop). Khi nó đến router đầu tiên, datagram hết hạn và router sẽ từ chối gửi gói tin ở xa hơn và phản hồi với thông báo hết hạn (ICMP type 11 code 0) bao gồm tên router, địa chỉ IP, MTU và một vài bit khác Dữ liệu. Nguồn sẽ nhận được thời gian chuyến đi khứ hồi từ bộ hẹn giờ. Sau khi traceroute lấy dữ liệu từ hop đầu tiên, nó sẽ lặp lại các bước này nhưng tăng TTL một, và tiếp tục lặp lại các bước này cho đến khi nó cuối cùng đến được bản thân máy chủ.

Để mã của bạn hoạt động, bạn cần có khả năng thao tác với gói dữ liệu lớp mạng và đặt giá trị TTL trong tiêu đề. Sau đó nó chỉ là một vấn đề phân tích ra các phản ứng từ mỗi router trả về một tin nhắn hết hạn TTL.

Các vấn đề liên quan