簡體   English   中英

使用Java解析給定IP地址的網絡接口

[英]Resolve network interface for a given IP address in Java

我想提前知道給定IP地址X將使用哪種網絡接口。

我可以通過瀏覽java.net.NetworkInterface.getNetworkInterfaces()的結果並針對getInterfaceAddresses()返回的每個InterfaceAddress的IP地址和子網掩碼檢查X來做到這一點,但這似乎並不有趣,我如果有幾種選擇有效,則最終結果可能與IP堆棧選擇的結果不同。

我為什么需要那個?

我需要知道可用於從具有IP地址X的對等方聯系到我的IP地址。

有一個答案在這里 ,我覺得解決您的問題。

但是為了進一步擴展,以下代碼將打印出接口的IP地址,該接口用於將IP數據包從主機路由到IP xxxx

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類型的服務來查找您的代理地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM