1
在具有多個IPv4地址的環境中,如何選擇要監聽的地點?我已經有好有壞運氣用下面的代碼:如何決定使用哪個IPv4地址?
foreach(IPAddress addr in Dns.GetHostAddresses(Dns.GetHostName()))
if (addr.AddressFamily == AddressFamily.InterNetwork)
if (!IPAddress.IsLoopback(addr))
return addr.ToString();
因爲它不考慮下面的接口適配器是一個迴環地址:
Ethernet adapter loopback:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Microsoft Loopback Adapter
Physical Address. . . . . . . . . : XX.XX.XX.XX.XX.XX
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Autoconfiguration IPv4 Address. . : 169.254.XXX.XXX(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
DNS Servers . . . . . . . . . . . : XXX: XXX: XXX:XXXX::XXX
XXX: XXX: XXX:XXXX::XXX
XXX: XXX: XXX:XXXX::XXX
NetBIOS over Tcpip. . . . . . . . : Enabled
我見過一些程序員假設一個名爲NetworkInterface
「本地連接」存在並始終是正確的界面,但我認爲這不是正確的方法。
你爲什麼不聽所有*接口?這是大多數服務器應用程序所做的,除非它們被配置爲另外做。 – Heinzi 2013-05-06 14:52:57
Heinzi ++ :)在這種情況下,使用'IPAddress.Any'作爲IP地址。 – 2013-05-06 14:53:20
如果有疑問,請在所有界面上進行收聽。如果你只想要一個特定的IP地址,用戶應該選擇它(就像在Wireshark中完成的那樣)。否則,軟件無法知道目標是什麼。 – JeffRSon 2013-05-06 14:55:13