使用Java解析给定IP地址的网络接口

时间:2016-01-13 16:02:41

标签: java routing network-programming

我想提前知道哪个网络接口将用于给定的IP地址X

我可以通过浏览java.net.NetworkInterface.getNetworkInterfaces()的结果并针对X返回的每个InterfaceAddress的IP地址和子网掩码检查getInterfaceAddresses()来做到这一点,但它没有'看起来很有趣,如果有多个选择有效,我最终会得到与IP堆栈选择的结果不同的结果。

为什么我需要它?

我需要知道可以用来通过IP地址X的对等方与我联系的IP地址。

1 个答案:

答案 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类型的服务来查找您的代理地址。