2012-04-17 90 views
0

我正在編寫一個服務器/客戶端分佈式工具。用戶必須在某個時候輸入網絡地址。我想通過告訴他們,幫助親愛的用戶確定當前的IP地址。可用IP地址呈現給用戶

[更新]客戶端和服務器在同一個網絡中運行。 (或用戶將有權訪問管理員)[/更新]

當我打電話Dns.GetHostAddresses(Dns.GetHostName())我得到一堆條目都是正確的,但並不真正有用。 通過哪種啓發式方法,我可以選擇最合適的條目以呈現給用戶?

+0

該IP地址的用途是什麼?如果客戶端位於NAT(服務器的w.r.t)之後,則客戶端代碼可能無法確定任何有用的地址。 – 2012-04-17 09:50:03

+0

@Damien_The_Unbeliever不,通常有*之間沒有NAT。 (*在某些時候,我的工具必須關注它的核心競爭力,但是謝謝我會明確地宣佈我的提示*作爲hit *。) – DerMike 2012-04-17 09:58:18

+0

如果他們在同一個網絡中,爲什麼需要告訴客戶自己的客戶地址呢? - 連接到服務器,服務器可以確定客戶端的地址。 – 2012-04-17 10:03:09

回答

2

如果我明白你的問題的權利,你可以比較IPAddress.AddressFamilyAddressFamily.InterNetwork過濾下來

if (ip.AddressFamily == AddressFamily.InterNetwork) 

下面是完整的代碼

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); 
foreach (IPAddress ip in host.AddressList) 
{ 
    if (ip.AddressFamily == AddressFamily.InterNetwork) 
    { 
     // Local ip address 
    } 
} 

AddressFamily.InterNetwork是對IPv4地址的值。在IPv6的情況下,您可以使用AddressFamily.InterNetworkV6。完整列表,please check this link

+0

那麼,這將是一些過濾器開始。謝謝。 – DerMike 2012-04-17 10:25:07

+0

太好了,歡迎:) – ABH 2012-04-17 10:38:30

+0

我也這麼認爲。不過,我仍然希望有一些啓發式的選擇贏家地址。 – DerMike 2012-04-17 12:20:04