【发布时间】:2010-10-10 02:00:09
【问题描述】:
我正在使用 TCP 套接字在服务器和客户端程序之间使用同一台计算机 (localhost) 上的特定端口号进行数据通信。
我需要一个可以捕获通过该套接字发送/接收的数据的软件?
(或)
在 Java 中从指定端口嗅探数据包的最简单方法是什么?
【问题讨论】:
我正在使用 TCP 套接字在服务器和客户端程序之间使用同一台计算机 (localhost) 上的特定端口号进行数据通信。
我需要一个可以捕获通过该套接字发送/接收的数据的软件?
(或)
在 Java 中从指定端口嗅探数据包的最简单方法是什么?
【问题讨论】:
像这样运行你的程序:
java -Djavax.net.debug=all helloworld.java
Oracle JSSE page 上已完整记录了该开关
优点:
缺点:
java.net.* 的类时才有效例如OutputStream 或 InputStream 如果您使用的是原始套接字,这将不起作用。这在链接中有记录。【讨论】:
Tcpdump也可以直接使用,如果流量不高,不用wireshark。就像
tcpdump -ni lo0 port 1234
应该是你所需要的(lo0 是所有 Unix/Linux 系统上的环回接口;当然也要更改端口号)。
【讨论】:
您可以使用tcpdump,它为您提供多种选择。使用 -w 选项将捕获保存在 .pcap 文件中,完成后使用 wireshark 打开该文件。这种方式的优点是您可以每秒捕获很高的数据包率,而不会影响您电脑的整体性能(即使它是低端的)。
【讨论】:
如果你不介意使用命令行来搞砸,你可以试试netcat。
如果您愿意,它可以让您监听端口并将输出转储到文件中。
你也可以让它发送虚假数据并记录响应。
我经常将它用作伪装的 HTTP 代理(并配置 Firefox 以使用它)来发现通过网络发送的内容。
【讨论】:
最简单的方法是使用代理实现从其中一个程序中的套接字替换InputStream/OutputStream,该代理实现可以打印/记录或“三通”到原始和打印/日志流。
但如果你真的想弄得一团糟,那里有很多嗅探器。
【讨论】:
我建议使用 Wireshark。它易于使用并且可以在许多平台上运行。
【讨论】: