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