2009-02-26 33 views
5

Tôi đang sử dụng các cổng TCP để truyền dữ liệu giữa máy chủ và chương trình máy khách bằng cách sử dụng một số cổng cụ thể trên cùng một máy tính (localhost).Java TCP Socket Sniffing

Tôi cần một phần mềm có thể thu thập dữ liệu được gửi/nhận thông qua ổ cắm đó?

(hoặc)

Cách đơn giản nhất để đánh hơi gói từ cổng được chỉ định trong Java là gì?

Trả lời

7

Tôi khuyên bạn nên sử dụng Wireshark. Rất dễ sử dụng và chạy trên nhiều nền tảng.

http://www.wireshark.org/

+0

Thật không may, nó sẽ không hoạt động khi máy khách và máy chủ trên cùng một máy. –

+1

Nó sẽ. Chỉ cần chọn giao diện loopback để chụp. –

+1

http://wiki.wireshark.org/CaptureSetup/Loopback (phần 'Giải pháp thay thế') - một giải pháp thay thế là thêm tuyến đường vào máy cục bộ của bạn thông qua cổng mạng – mjn

1

Cách đơn giản nhất là thay thế InputStream/OutputStream từ một ổ cắm tại một trong những chương trình với một thực hiện proxy, mà một trong hai bản in/log hoặc "tees" với bản gốc và một bản in/dòng đăng nhập .

Nhưng có rất nhiều người đánh hơi ngoài kia nếu bạn thực sự muốn lộn xộn.

1

Nếu bạn không thấy phiền và bị bẩn với dòng lệnh, bạn có thể thử netcat. Nó sẽ cho phép bạn nghe trên một cổng và kết xuất đầu ra vào một tệp nếu bạn muốn.
Bạn cũng có thể gửi dữ liệu giả mạo và ghi lại phản hồi.

Tôi thường sử dụng nó như một proxy giả mạo HTTP (và định cấu hình Firefox để sử dụng nó) để khám phá những gì đang được gửi qua dây.

4

Nếu bạn có một số mã hóa (và không chỉ chạy wireshark/tcpdump) thì bạn có vài lựa chọn. (?) Nếu bạn muốn dính vào Java, sau đó chỉ tùy chọn để sử dụng socket liệu là thông qua JNI và có rất ít các thư viện có thể giúp đỡ, ví dụ:

  • jNetPcap - wrapper xung quanh thư viện libpcap/winpcap bản địa, phơi bày tất cả các chức năng và cấu trúc
  • RockSaw của họ - API cho việc sử dụng ổ cắm thô
0

bạn có thể sử dụng tcpdump cung cấp cho bạn một loạt các lựa chọn. Bạn lưu ảnh chụp trong tệp .pcap bằng tùy chọn -w và khi bạn hoàn tất, bạn mở tệp đó bằng wireshark. Ưu điểm của cách này là bạn có thể nắm bắt một tốc độ cao của gói tin mỗi giây mà không ảnh hưởng đến hiệu suất tổng thể của máy của bạn (ngay cả khi nó là kết thúc thấp).

1

Tcpdump cũng có thể được sử dụng trực tiếp, nếu lưu lượng truy cập không cao, hãy giảm nhu cầu sử dụng wireshark. Chỉ cần một cái gì đó như

tcpdump -ni lo0 port 1234 

phải là tất cả những gì bạn cần (lo0 là giao diện loopback trên tất cả các hệ thống Unix/Linux; cũng thay đổi số cổng của khóa học).

1

Chạy chương trình của bạn như sau:

java -Djavax.net.debug=all helloworld.java

Việc chuyển đổi được ghi chép lại đầy đủ trên Oracle JSSE page

Ưu điểm:

  • đơn giản hơn nhiều so với các giải pháp đề nghị khác (không cần phần mềm bên ngoài)
  • Cũng có thể giải mã/kết xuất TLS/SSL connectio ns :)

Nhược điểm:

  • này sẽ chỉ làm việc nếu bạn đang sử dụng các lớp học từ java.net.* ví dụ OutputStream hoặc InputStream Điều này sẽ không hoạt động nếu bạn đang sử dụng ổ cắm thô. Đây là tài liệu trong liên kết.
  • Tin rằng điều này chỉ có thể hoạt động trên Oracle JDK.
Các vấn đề liên quan