2010-03-30 77 views
1

目前我使用下面的代碼來檢索本地工作站的IP地址...IP地址查詢(XP VS Windows 7中)

strIPAddress = System.Net.Dns.GetHostEntry(strComputerName).AddressList(0).ToString() 

這是罰款,在Windows XP工作站。但是,在Vista和Windows 7中,這會返回根本不使用的IPv6地址。 是否有一種設置此方法的方法,因此它總是返回IPv4地址而不考慮平臺?

我知道我可以將AddressList的值增加到1,並在Windows 7中獲得正確的IP。不好的部分是,這需要通過標識操作系統和選擇其中一個的運動。

必須以某種方式指定IPv4。也許從網絡上的DNS而不是工作站本身獲得結果?

回答

3

你只需要通過AddressList環看AddressFamily眼看被設置爲InterNetwork

Dim IP4 = New List(Of IPAddress)(Dns.GetHostEntry(strComputer).AddressList).Find(Function(f) f.AddressFamily = Sockets.AddressFamily.InterNetwork) 

或者更長的路:

Dim IP4 As IPAddress 
    Dim AL = Dns.GetHostEntry(strComputer).AddressList 
    For Each A In AL 
     If A.AddressFamily = Sockets.AddressFamily.InterNetwork Then 
      IP4 = A 
      Exit For 
     End If 
    Next 
+0

完美,看起來像它會工作。還有一些類似的東西(格式化命令),我仍然無法包裹頭部。 – TheHockeyGeek 2010-03-30 16:42:30

+0

你知道克里斯我正要躺在你身上,看起來很蠢。當我讀到我正在考慮循環接口的問題時,ala System.Net.NetworkInformation.NetworkInterface。幸運的是,我重新閱讀了這個問題;)所有這些我都同意你的看法。幾個星期前,當我們拿到第一臺W7機器時,我剛剛經歷了這個過程。許多驚喜,IPv6地址,爲什麼必須有 廣播地址 多播地址 等 ARP條目無論如何,我upvoted你爲我思考邪惡的想法,你是正確的。 – dbasnett 2010-04-08 14:09:34