6

我正在使用 TCP 套接字在同一台计算机(本地主机)上使用特定端口号在服务器和客户端程序之间进行数据通信。

我需要一个可以捕获通过该套接字发送/接收的数据的软件吗?

(或者)

从 Java 中的指定端口嗅探数据包的最简单方法是什么?

4

7 回答 7

7

我建议使用 Wireshark。它易于使用并在许多平台上运行。

http://www.wireshark.org/

于 2009-02-26T13:24:04.600 回答
4

如果您正在编写一些代码(而不仅仅是运行 wireshark/tcpdump),那么您几乎没有选择。如果您想坚持使用 Java,那么使用原始套接字的唯一(?)选项是通过 JNI,并且很少有库可以提供帮助,例如:

  • jNetPcap - 本地 libpcap/winpcap 库的包装器,公开它们的所有功能和结构
  • RockSaw - 使用原始套接字的 API
于 2009-02-26T14:09:03.897 回答
1

最简单的方法是用代理实现替换其中一个程序中的套接字中的InputStream/ OutputStream,该代理实现打印/日志或“三通”到原始和打印/日志流。

但是如果你真的想弄得一团糟,那里有很多嗅探器。

于 2009-02-26T13:24:57.297 回答
1

如果您不介意使用命令行感到沮丧和肮脏,您可以尝试netcat。如果您愿意,它可以让您监听端口并将输出转储到文件中。
您还可以让它发送虚假数据并记录响应。

我经常将它用作假装的 HTTP 代理(并配置 Firefox 以使用它)来发现通过网络发送的内容。

于 2009-02-26T13:28:18.223 回答
1

Tcpdump也可以直接使用,如果流量不高,不需要使用wireshark。就像

tcpdump -ni lo0 port 1234

应该是你所需要的(lo0 是所有 Unix/Linux 系统上的环回接口;当然还要更改端口号)。

于 2012-03-29T16:39:28.290 回答
1

像这样运行你的程序:

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

Oracle JSSE 页面上完整记录了该开关

优点:

  • 比其他建议的解决方案简单得多(不需要外部软件)
  • 还可以解密/转储 TLS/SSL 连接 :)

缺点:

  • 这仅在您使用来自java.net.*eg的类时才有效,OutputStream或者InputStream如果您使用原始套接字,这将不起作用。这记录在链接中。
  • 相信这可能只适用于 Oracle JDK。
于 2016-05-20T07:46:51.877 回答
0

您可以使用tcpdump它为您提供多种选择。使用 -w 选项将捕获保存在.pcap文件中,完成后使用wireshark. 这种方式的优点是您可以每秒捕获高速率的数据包,而不会影响您电脑的整体性能(即使它是低端的)。

于 2011-11-13T16:35:13.367 回答