2010-01-12 11 views
7

Ich habe den folgenden Code:.Net IPAddress IPv4

Dim ipAdd As IPAddress = Dns.GetHostEntry(strHostname).AddressList(0) 
Dim strIP As String = ipAdd.ToString() 

Wenn ich in String konvertieren statt einer IPv4-Adresse wie 192.168.1.0 oder ähnliche ich die IPv6-Version erhalten: FD80 :: 5dbe: 5d89: e51b : d313 Adresse.

Gibt es eine Möglichkeit, die IPv4-Adresse vom IPAddress-Typ zurückzugeben?

Dank

Antwort

15

Statt bedingungslos das erste Element des Address nehmen Sie die erste IPv4-Adresse nehmen könnten:

var address = Dns.GetHostEntry(strHostname) 
       .AddressList 
       .First(ip => ip.AddressFamily == AddressFamily.InterNetwork); 
+0

Hier ist die VB-Version davon: Dim IPAdd als IPAddress = Dns.GetHostEntry ("aol.com"). AddressList.First (Funktion (f) f.AddressFamily = Sockets.AddressFamily.InterNetwork) –

2

dtb-Lösung in vielen Situationen arbeiten. In vielen Fällen können Benutzer jedoch mehrere v4-IPs auf ihrem System eingerichtet haben. Manchmal liegt das daran, dass sie einige "virtuelle" Adapter haben (von Anwendungen wie VirtualBox oder VMWare) oder weil sie mehr als einen physischen Netzwerkadapter an ihren Computer angeschlossen haben.

In diesen Situationen ist es natürlich wichtig, dass die richtige IP verwendet wird. Vielleicht möchten Sie den Benutzer fragen, welche IP-Adresse angemessen ist.

Um eine Liste der nutzbaren v4 IPs erhalten Sie Code ähnlich verwenden können:

‚ein Array erhalten, die alle verfügbaren IP-Adressen enthält: Dim IPList() As IPAddress = Net.Dns.GetHostEntry (Net. Dns.GetHostName.ToString) .AddressList für mich

'Copy valid IPs from IPList to FinalIPList 
Dim FinalIPList As New ArrayList(IPList.Length) 
For Each IP As IPAddress In IPList 
    'We want to keep IPs only if they are IPv4 and not a 'LoopBack' device 
    '(an InterNetwork AddressFamily indicates a v4 IP) 
    If ((Not IPAddress.IsLoopback(IP)) And (IP.AddressFamily = AddressFamily.InterNetwork)) Then 
     FinalIPList.Add(IP) 
    End If 
Next IP 
0

die Lösung mit dem Prädikat "First" richtig funktionierte nicht, das ist der Code, der für mich funktioniert:

public static string GetLocalIP() 
     { 
      string ipv4Address = String.Empty; 

      foreach (IPAddress currrentIPAddress in Dns.GetHostAddresses(Dns.GetHostName())) 
      { 
       if (currrentIPAddress.AddressFamily.ToString() == System.Net.Sockets.AddressFamily.InterNetwork.ToString()) 
       { 
        ipv4Address = currrentIPAddress.ToString(); 
        break; 
       } 
      } 

      return ipv4Address; 
     }