J'ai le code suivant:
Dim ipAdd As IPAddress = Dns.GetHostEntry(strHostname).AddressList(0) Dim strIP As String = ipAdd.ToString()
3 Réponses :
Au lieu de la prise sans condition du premier élément de l'adresse adresses, vous pouvez prendre la première adresse IPv4:
var address = Dns.GetHostEntry(strHostname) .AddressList .First(ip => ip.AddressFamily == AddressFamily.InterNetwork);
Voici la version VB de celle-ci: Dim iPadd comme iPaddress = dns.gethostenry ("aol.com"). Adresslist.First (Fonction (F) F.AddressFamily = sockets.addressfamily.InterNetwork)
La solution de DTB fonctionnera dans de nombreuses situations. Dans de nombreux cas, toutefois, les utilisateurs peuvent avoir plusieurs installations V4 IPS sur leur système. Parfois, c'est parce qu'ils ont des adaptateurs "virtuels" (d'applications telles que VirtualBox ou VMware) ou parce qu'ils ont plus d'un adaptateur réseau physique connecté à leur ordinateur.
Il va sans dire que dans ces situations, il est important que le bon IP est utilisé. Vous voudrez peut-être envisager de demander à l'utilisateur quelle adresse IP est appropriée. P>
Pour obtenir une liste d'utilisables V4 IPS, vous pouvez utiliser le code similaire à: p>
'Obtenez un tableau qui contient tous les IPS disponibles: Dim Iplist () comme ipaddress = net.dns.gethostentry (net.dns.gethostname.tostring) .Addresslist P>
'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
Pour moi, la solution avec le "premier" prédicat n'a pas fonctionné correctement, c'est le code qui fonctionne pour moi: