Je sais que cela peut donner un coup de pied à un cheval mort, mais cela peut peut-être aider quelqu'un. J'ai cherché partout un moyen de trouver mon adresse IP locale, mais partout où je trouve, il est dit d'utiliser:
Dns.GetHostEntry(Dns.GetHostName());
Je n'aime pas ça du tout parce qu'il obtient juste toutes les adresses attribuées à votre ordinateur. Si vous avez plusieurs interfaces réseau (ce que presque tous les ordinateurs font de nos jours), vous ne savez pas quelle adresse va avec quelle interface réseau. Après avoir fait un tas de recherches, j'ai créé une fonction pour utiliser la classe NetworkInterface et en extraire les informations. De cette façon, je peux dire de quel type d'interface il s'agit (Ethernet, sans fil, bouclage, tunnel, etc.), qu'elle soit active ou non, et SOOO beaucoup plus.
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 avec l'interface Ethernet.
J'espère que cela aide quelqu'un! :-)
ÉDITER:
Il a été souligné (merci @NasBanov) que même si cette fonction permet d'extraire l'adresse IP d'une bien meilleure manière que de l'utiliser, Dns.GetHostEntry(Dns.GetHostName())
elle ne réussit pas très bien à prendre en charge plusieurs interfaces du même type ou plusieurs adresses IP sur une seule interface. . Il ne renverra une seule adresse IP que si plusieurs adresses peuvent être attribuées. Pour renvoyer TOUTES ces adresses attribuées, vous pouvez simplement manipuler la fonction d'origine pour toujours renvoyer un tableau au lieu d'une seule chaîne. 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 retournera TOUTES les adresses attribuées pour un type d'interface spécifique. Maintenant, pour obtenir une seule chaîne, vous pouvez utiliser l' .FirstOrDefault()
extension pour renvoyer le premier élément du tableau ou, s'il est vide, renvoyer une chaîne vide.
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
If I am not connected to a network and I am connected to the internet
Cette affirmation semble contradictoire. Essayez-vous de savoir si votre ordinateur est connecté à un réseau local privé ou à Internet?