10

我正在尝试编写一个快速的小型 java 应用程序来读取 pcap 文件的内容(来自 Wireshark)并在 linux 机器上的网络上播放数据。该文件将仅包含 UDP 广播数据包,因此我的应用程序只需要数据包中的时间戳、端口号和数据来执行我需要的操作。我的问题是我尝试使用此代码测试的应用程序正在侦听 Windows 上的 IPv4 UDP 广播。我的测试应用程序不断打开一个 IPv6 套接字来发送数据。

netstat -a -u -p用来确定套接字是 udp6 套接字。在 Windows 上,我知道它不是。

在java中强制Linux上的测试应用程序打开udp或udp4套接字的最简单或最佳方法是什么?我不想每次都被迫提供 ipv4 网络地址。我希望能够将此代码移动到另一台机器上,而不必记住它们是一些需要更改的配置。

4

2 回答 2

17

将 -Djava.net.preferIPv4Stack=true 添加到您的 Java 应用程序运行时属性。

于 2008-11-14T16:38:57.187 回答
3

您也可以使用此命令(以 root 身份),并且不需要在每个 java 应用程序中添加 -Djava.net.preferIPv4Stack=true 参数:

 # echo 0 > /proc/sys/net/ipv6/bindv6only

如果你想永远保持这个配置,你可以在一些初始脚本中编写它。

于 2010-12-01T07:36:11.663 回答