2011-08-27 89 views
5

如何在vb.net中獲取ip地址。我使用下面的代碼來獲取本地IP地址,但它顯示dns沒有聲明。任何一個可以告訴我那是什麼的DNS代碼如何使用vb獲取本地ip地址?

VB代碼

Imports System.Environment 
Imports System.Net 

Public Class Tester 
Public Shared Sub Main 
Dim hostname As String = Dns.GetHostName() 
Dim ipaddress As String = CType(Dns.GetHostByName(hostname).AddressList.GetValue(0), IPAddr 
ess).ToString 
Console.WriteLine("Computer Name: " & hostname & " IP Address: " & ipaddress) 
End Sub 

End Class 
+0

你知道一臺機器可能沒有或幾個IP地址? –

+2

現在你已經完全改變了問題 - 首先你問'Dns',現在你問的是連接客戶端的iüp...如果你有第二個問題,你必須打開第二個問題,而不是改變第一個問題!我把你的問題回滾到原來的問題......如果任何答案有幫助,請將upvote/mark標記爲已接受,並打開關於「客戶端ip」的第二個問題! – Yahia

+2

顯然有人不知道以禮貌,可接受,公民,人類,正常,體面的方式提出問題 – Martin

回答

1

使用此:

HttpContext.Current.Request.UserHostAddres 

希望這有助於。

0

IPS = Dns.GetHostAddresses(主機名)

這裏是一個示例代碼MSDN

0

您可以通過下面的代碼獲得系統的本地IP地址:

Dim host As String = System.Net.Dns.GetHostName() 
Dim LocalHostaddress As String = System.Net.Dns.GetHostByName(host).AddressList(1).ToString() 
+0

真的這是一個糟糕的,典型的答案。當我們需要的IP位於'AddressList()'的索引0或2時會發生什麼? – ElektroStudios

+0

這將是一個更好的解決方案,但仍不是100%的效率:返回(從IP作爲Net.IPAddress在System.Net中。Dns.GetHostEntry(System.Net.Dns.GetHostName())。AddressList() Where Not IP.ToString.Contains(「:」))。FirstOrDefault.ToString – ElektroStudios

+0

如果安裝了回送適配器或藍牙LAN適配器,該怎麼辦?你假設網絡適配器1是沒有檢查的正確的。問題是 - 索引數組從0開始,而不是一個。陣列中甚至可能沒有適配器1。最好的方法是通過適配器進行迭代,並通過驗證的簡單方法[決定]哪一個是正確的,以測試ipv4,ipv6或bt地址。 – Matth3w

3

因爲給我的感覺(標題中)的問題尚未完全解答...

Dim hostName = System.Net.Dns.GetHostName() 
For Each hostAdr In System.Net.Dns.GetHostEntry(hostName).AddressList() 

    ' If you just want to write every IP 
    Console.WriteLine("Name: " & hostName & " IP Address: " & hostAdr.ToString() 

    ' If you want to look if the device is member of a specific network 
    If hostAdr.ToString().StartsWith("192.168.1.") Then DoSomething() : Exit For 

    ' I think you get the idea ^^ 
    ' ... 
Next 

......顯然這不是OP所要求的,但只是從標題和谷歌鏈接,這應該回答什麼人來到這裏尋找。

btw GetHostByName()似乎被棄用,GetHostEntry()像這樣工作的方式相同,沒有發出警告。

0
Dim ipaddress As String = 
    Dns.GetHostEntry(Dns.GetHostName).AddressList(0).ToString 

這很可能會讓IPv6地址

而且

Dim ipaddress As String = 
    Dns.GetHostEntry(Dns.GetHostName).AddressList.FirstOrDefault(() => { }, 
    (ip.AddressFamily = AddressFamily.InterNetwork)).ToString 

這會給IPv4地址

我的VB是生鏽所以這裏是一個C#代碼爲我的作品。

using System.Linq; 

using System.Net.Sockets; 

string IPaddress = 
    Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString(); //For Ipv6 

string IPaddress = 
    Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => 
    ip.AddressFamily == AddressFamily.InterNetwork).ToString(); //For Ipv4 

我希望這有助於。

1
Dim hostName = System.Net.Dns.GetHostName() 
    For Each hostAdr In System.Net.Dns.GetHostEntry(hostName).AddressList() 

     ' If you just want to write every IP 
     'Console.WriteLine("Name: " & hostName & " IP Address: " & hostAdr.ToString()) 
     Me.RichTextBox1.Text = hostAdr.ToString 

     'If you want to look if the device is member of a specific network 

     ' ... 
    Next