2010-01-12 7 views
7

je le code suivant:.Net IPAddress IPv4

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

Lorsque je convertir en chaîne au lieu d'une adresse IPv4 comme 192.168.1.0 ou similaire, je reçois la version IPv6: FD80 :: 5dbe: 5d89: e51b : adresse d313.

Est-il possible de renvoyer l'adresse IPv4 du type IPAddress?

Merci

Répondre

15

Au lieu de prendre sans condition le premier élément du AddressList, vous pouvez prendre la première adresse IPv4:

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

Voici la version VB de cela: Dim IPAddAdd IPAddress = Dns.GetHostEntry ("aol.com"). AddressList.First (Fonction (f) f.AddressFamily = Sockets.AddressFamily.InterNetwork) –

2

solution de DTB travaillerez dans de nombreuses situations. Cependant, dans de nombreux cas, les utilisateurs peuvent avoir plusieurs IP v4 configurés sur leur système. Parfois, c'est parce qu'ils ont des adaptateurs «virtuels» (à partir d'applications comme VirtualBox ou VMWare) ou parce qu'ils ont plus d'une carte réseau physique connectée à leur ordinateur.

Il va sans dire que dans ces situations, il est important d'utiliser l'adresse IP correcte. Vous pouvez envisager de demander à l'utilisateur quelle adresse IP est appropriée.

Pour obtenir une liste des adresses IP v4 utilisables que vous pouvez utiliser un code similaire à:

« Obtenir un tableau qui contient toutes les adresses IP disponibles: Dim IPList() As IPAddress = Net.Dns.GetHostEntry (Net. 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

pour moi, la solution avec le "premier" prédicat ne fonctionnait pas correctement, c'est le code qui fonctionne pour moi:

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; 
     } 
Questions connexes