使用Java 6,在linux上如何确保使用ipv4套接字?
-
08-07-2019 - |
题
我正在尝试编写一个快速的小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
如果您想永久保留此配置,可以在一些初始脚本中编写它。
不隶属于 StackOverflow