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

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

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

有帮助吗?

解决方案

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

其他提示

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

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

如果您想永久保留此配置,可以在一些初始脚本中编写它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top