Je sais qu'il s'agit peut-être d'un coup de pied dans un cheval mort, mais peut-être que cela peut aider quelqu'un. J'ai cherché partout un moyen de trouver mon adresse IP locale, mais partout où j'ai trouvé il est dit d'utiliser.. :
Dns.GetHostEntry(Dns.GetHostName());
Je n'aime pas du tout cette méthode car elle permet de récupérer toutes les adresses attribuées à votre ordinateur. Si vous avez plusieurs interfaces réseau (ce qui est le cas de presque tous les ordinateurs aujourd'hui), vous n'avez aucune idée de quelle adresse correspond à quelle interface réseau. Après avoir fait un tas de recherches, j'ai créé une fonction qui utilise la classe NetworkInterface et en extrait les informations. De cette façon, je peux savoir quel type d'interface c'est (Ethernet, sans fil, loopback, tunnel, etc.), si elle est active ou non, et bien d'autres choses encore.
public string GetLocalIPv4(NetworkInterfaceType _type)
{
string output = "";
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output = ip.Address.ToString();
}
}
}
}
return output;
}
Maintenant pour obtenir l'adresse IPv4 de votre appel d'interface réseau Ethernet :
GetLocalIPv4(NetworkInterfaceType.Ethernet);
Ou votre interface sans fil :
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
Si vous essayez d'obtenir une adresse IPv4 pour une interface sans fil, mais que votre ordinateur n'a pas de carte sans fil installée, il renverra simplement une chaîne vide. Même chose pour l'interface Ethernet.
J'espère que cela aidera quelqu'un ! :-)
EDITAR:
Il a été signalé (merci @NasBanov) que même si cette fonction extrait l'adresse IP d'une manière bien plus efficace que l'utilisation de la fonction Dns.GetHostEntry(Dns.GetHostName())
il ne supporte pas très bien les interfaces multiples du même type ou les adresses IP multiples sur une seule interface. Elle ne renvoie qu'une seule adresse IP alors qu'il peut y avoir plusieurs adresses attribuées. Pour renvoyer TOUTES ces adresses assignées, vous pouvez simplement manipuler la fonction originale pour qu'elle renvoie toujours un tableau au lieu d'une seule chaîne de caractères. Par exemple :
public static string[] GetAllLocalIPv4(NetworkInterfaceType _type)
{
List<string> ipAddrList = new List<string>();
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
ipAddrList.Add(ip.Address.ToString());
}
}
}
}
return ipAddrList.ToArray();
}
Maintenant, cette fonction renverra TOUTES les adresses assignées pour un type d'interface spécifique. Pour obtenir une seule chaîne de caractères, vous pouvez utiliser la fonction .FirstOrDefault()
pour retourner le premier élément du tableau ou, s'il est vide, retourner une chaîne vide.
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
2 votes
If I am not connected to a network and I am connected to the internet
Cette déclaration semble contradictoire. Essayez-vous de déterminer si votre ordinateur est connecté à un réseau local privé ou à l'Internet ?6 votes
A titre d'avertissement : Un ordinateur peut avoir plus d'une interface IP, par exemple un LAN et un WiFi. Si vous liez un service à un élément matériel particulier (par exemple le réseau local), vous avez besoin de l'adresse IP du réseau local. La plupart des exemples suivants renverront la "première" ou la "dernière" adresse IP trouvée. Si vous avez plus de 2 adresses IP, votre programme peut fonctionner dans 50% des cas, en fonction de l'ordre aléatoire dans lequel le système d'exploitation renvoie les adresses IP.
0 votes
@MarkLakata J'ai pensé au même problème. La fonction dans ma réponse ci-dessous s'en chargera. Vous pouvez spécifier le type d'interface réseau à partir duquel vous souhaitez obtenir l'adresse IP.
3 votes
Pour info, si vous cherchez sur Google pour Unity3D, c'est Network.player.ipAddress dans leur API.
0 votes
@MarkLakata strictement parlant, le "premier" ou le "dernier" IP est l'IP "correcte", car le navigateur peut utiliser n'importe quelle IP disponible. Une bonne correction devrait probablement consister à renvoyer cada IP associée à la machine.