C# Получить активный сетевой адрес IPv4
У меня есть несколько сетевых карт на моем компьютере. (Из-за VMWare)
Как я могу найти IPv4-адрес активной карты. Я имею в виду, если я отправляю ping в терминале и перехватываю пакет в WireShark, я хочу адрес "Source".
Я думал о проверке каждого сетевого интерфейса и посмотреть, пусто ли GateWay или нет? Или, возможно, пинг 127.0.0.1 и получить IP-источник запроса пинга? Но не может реализовать это.
На данный момент у меня есть этот код, который я нашел на StackOverFlow
public static string GetLocalIpAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
return host.AddressList.First(h => h.AddressFamily == AddressFamily.InterNetwork).ToString();
}
Но он получает IP-адрес карты VmWare. Но я не знаю, что еще это ".First()
"Я мог бы использовать.
2 ответа
Наконец-то я нашел эффективный способ получить настоящий IP. По сути, он ищет все интерфейсы в IPv4, которые работают, и единственное, что заставляет его принимать решение, это то, что он принимает только интерфейс со шлюзом по умолчанию.
public static string GetLocalIpAddress()
{
foreach (var netI in NetworkInterface.GetAllNetworkInterfaces())
{
if (netI.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 &&
(netI.NetworkInterfaceType != NetworkInterfaceType.Ethernet ||
netI.OperationalStatus != OperationalStatus.Up)) continue;
foreach (var uniIpAddrInfo in netI.GetIPProperties().UnicastAddresses.Where(x => netI.GetIPProperties().GatewayAddresses.Count > 0))
{
if (uniIpAddrInfo.Address.AddressFamily == AddressFamily.InterNetwork &&
uniIpAddrInfo.AddressPreferredLifetime != uint.MaxValue)
return uniIpAddrInfo.Address.ToString();
}
}
Logger.Log("You local IPv4 address couldn't be found...");
return null;
}
Ну, мой друг, вы можете сделать следующее:
var nics = NetworkInterface.GetAllNetworkInterfaces();
foreach (var networkInterface in nics)
{
if (networkInterface.OperationalStatus == OperationalStatus.Up)
{
var address = networkInterface.GetPhysicalAddress();
}
}
переменная address дает вам доступ к PhysicalAddress текущего сетевого интерфейса Up