VB.NET: захват и привязка IP-адресов к интерфейсам - PullRequest
1 голос
/ 28 мая 2011

Я хотел бы найти способ привязать назначенные адреса IPv4 и IPv6 к различным интерфейсам и иметь возможность определить, к какому интерфейсу они привязаны.

В настоящее время я зацикливаю 'System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces' и могу получить информацию, специфичную для интерфейса:

        For Each nic As System.Net.NetworkInformation.NetworkInterface In System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()

        myarr(count2, 0) = (String.Format("{0}", nic.Description))
        myarr(count2, 1) = (String.Format("{0}", nic.GetPhysicalAddress))
        myarr(count2, 2) = (String.Format("{0}", nic.OperationalStatus))
        myarr(count2, 3) = (String.Format("{0}", nic.Speed))

        count2 += 1


    Next

С помощью этого метода, к сожалению, я не могу определить простой способ получения назначенных IP-адресов.

Самый распространенный метод, который я легко могу найти с помощью google-foo, - это найти ваш IP, выполнив что-то вроде следующего:

Dim ipAdd As IPAddress = Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.First(Function(f) f.AddressFamily = Sockets.AddressFamily.InterNetwork)

Это хорошо, но я не могу определить, какой интерфейс используется, и не может определить назначенный IP-адрес, который не проходит через DNS или несколько NICS.

Возможно, я могу сделать какой-то гетто метод выдачи команды из командной строки и анализа всей информации из ipconfig или получения GUID и запуска через реестр, но я чувствую, что должен быть более простой и эффективный метод.

Хорошим примером того, что я хочу, является возможность создания списка, такого как IPCONFIG, где он содержит информацию об интерфейсе и назначенный ему IP-адрес, и т. Д. *

1 Ответ

1 голос
/ 28 мая 2011

у вас за петлю попробуйте

Dim ip = nic.GetIPProperties().UnicastAddresses(0).Address;
...