Как программно отфильтровать IP-адреса виртуальной машины?C#

Место общения программистов C#
Ответить
Anonymous
 Как программно отфильтровать IP-адреса виртуальной машины?

Сообщение Anonymous »

У меня есть этот фрагмент кода для получения IP-адреса Ethernet:

Код: Выделить всё

public static IPAddress GetEthernetIpAddress()
{
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if (ni.OperationalStatus == OperationalStatus.Up)
{
if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
return ip.Address;
}
}
}
}
}

return default;
}
Однако, если виртуальная машина установлена, она может вернуть IP-адрес этой виртуальной машины. Как отфильтровать IP-адреса виртуальных машин?
Одно из решений, которое я нашел в Интернете, предлагает проверить, существует ли адрес шлюза, потому что, очевидно, сетевой интерфейс виртуальной машины его не имеет, но поиск в Google для подтверждения этого дал мне другой ответ:

Код: Выделить всё

if (ni.GetIPProperties().GatewayAddresses.FirstOrDefault() == null)
ChatGPT o1-preview предложил проверить имя сетевого интерфейса на соответствие «vEthernet», но я не доверяю этому методу (не обращайте внимания на этот параметр StringComparison):

Код: Выделить всё

if (!ni.Name.Contains("vEthernet", StringComparison.OrdinalIgnoreCase))
Я не нашел ничего полезного в официальной документации по NetworkInterface или UnicastIPAddressInformation. Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -from-a-vm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»