Si vous ne pouvez pas compter sur l'obtention de votre adresse IP d'un serveur DNS (ce qui m'est arrivé), vous pouvez utiliser l'approche suivante:
Le Système.Net.NetworkInformation espace de noms contient un NetworkInterface classe, qui a une statique GetAllNetworkInterfaces méthode.
Cette méthode sera de retour tous les "interfaces réseau" sur votre machine, et il n'y a généralement pas mal, même si vous avez seulement un adaptateur sans fil et/ou un adaptateur ethernet matériel installé sur votre machine. L'ensemble de ces interfaces réseau ont des adresses IP valides pour votre machine locale, bien que vous avez probablement ne veulent qu'une seule.
Si vous êtes à la recherche d'une adresse IP, alors vous aurez besoin pour filtrer la liste vers le bas jusqu'à ce que vous pouvez identifier la bonne adresse. Vous aurez probablement besoin de faire de l'expérimentation, mais j'ai eu du succès avec l'approche suivante:
- Filtrer les NetworkInterfaces qui sont inactifs en vérifiant
OperationalStatus == OperationalStatus.Up
. Cela exclut de votre physique de la carte ethernet, par exemple, si vous ne disposez pas d'un câble réseau branché.
Pour chaque NetworkInterface, vous pouvez obtenir un IPInterfaceProperties objet à l'aide de la GetIPProperties méthode, et à partir d'un IPInterfaceProperties objet, vous pouvez accéder à la UnicastAddresses propriété pour une liste de UnicastIPAddressInformation objets.
- Filtre non-privilégiées adresses unicast en vérifiant
DuplicateAddressDetectionState == DuplicateAddressDetectionState.Preferred
- Filtrer "virtuel" des adresses en vérifiant
AddressPreferredLifetime != UInt32.MaxValue
.
À ce stade, je prends l'adresse de la première (le cas échéant) adresse monodiffusion qui correspond à l'ensemble de ces filtres.