2010-01-12 21 views
7

Mam następujący kod:.Net IPAddress IPv4

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

Kiedy konwersji do String zamiast adresu IPv4 jak 192.168.1.0 lub podobny ja pobrać wersję IPv6: fd80 :: 5dbe: 5d89: e51b : adres d313.

Czy istnieje sposób na zwrócenie adresu IPv4 z adresu IPAddress?

Dzięki

Odpowiedz

15

Zamiast bezwarunkowo biorąc pierwszy element AddressList, można podjąć pierwszy adres IPv4: rozwiązanie

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

Oto wersja VB tego: Dim ipAdd jako adres IP = Dns.GetHostEntry ("aol.com"). AddressList.First (funkcja (f) f.AddressFamily = Sockets.AddressFamily.InterNetwork) –

2

DTB będzie pracować w wielu sytuacjach. Jednak w wielu przypadkach użytkownicy mogą mieć wiele adresów IP v4 w swoim systemie. Czasami dzieje się tak dlatego, że mają jakieś "wirtualne" adaptery (z aplikacji takich jak VirtualBox lub VMWare) lub dlatego, że mają więcej niż jeden fizyczny adapter sieciowy podłączony do ich komputera.

Jest rzeczą oczywistą, że w takich sytuacjach ważne jest, aby użyć właściwego adresu IP. Możesz rozważyć zapytanie użytkownika, który adres IP jest odpowiedni.

Aby uzyskać listę użytecznych adresów IP v4 można użyć kodu podobnego do:

„Get tablicę, która zawiera wszystkie dostępne adresy IP: Dim iplist() jako IPAddress = Net.Dns.GetHostEntry (netto. Dns.GetHostName.ToString) .AddressList

'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

dla mnie rozwiązanie z „pierwszej” orzecznik nie działa prawidłowo, jest to kod, który działa dla mnie:

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; 
     } 
Powiązane problemy