我想提前知道哪个网络接口将用于给定的IP地址X
。
我可以通过浏览java.net.NetworkInterface.getNetworkInterfaces()
的结果并针对X
返回的每个InterfaceAddress
的IP地址和子网掩码检查getInterfaceAddresses()
来做到这一点,但它没有'看起来很有趣,如果有多个选择有效,我最终会得到与IP堆栈选择的结果不同的结果。
我需要知道可以用来通过IP地址X
的对等方与我联系的IP地址。
答案 0 :(得分:1)
我觉得有一个答案here可以解决你的问题。
但为了稍微扩展一下,以下代码打印出用于将IP数据包从主机路由到IP x.x.x.x
的接口的IP地址。
DatagramSocket s = new DatagramSocket();
s.connect(InetAddress.getByAddress(new byte[]{x,x,x,x}), 0);
NetworkInterface n = NetworkInterface.getByInetAddress(s.getLocalAddress());
InetAddress yourInterfaceIP = n.getInetAddresses().nextElement();
System.out.println(yourInterfaceIP.getHostAddress());
设置UDP数据报套接字不会发送任何内容。它只是检查两个端点之间的权限和路由。您无法访问您指定的IP,以使其正常工作。
这使用您运行此主机的主机上的路由。显然它不使用远程主机上的路由。实际上,它从X
的角度返回它认为可达的接口。
这显然不适用于代理,您需要使用whats-my-ip类型的服务来查找您的代理地址。