Поиск IP-адреса в VB.net (XP против Windows 7) - PullRequest
1 голос
/ 30 марта 2010

В настоящее время я использую следующий код для получения IP-адреса локальной рабочей станции ...

strIPAddress = System.Net.Dns.GetHostEntry(strComputerName).AddressList(0).ToString()

Это хорошо для рабочих станций Windows XP. Однако в Vista и Windows 7 это возвращает адрес IPv6, который вообще не используется. Есть ли способ настроить это на работу, чтобы он всегда возвращал адрес IPv4 независимо от платформы?

Я знаю, что могу увеличить значение AddressList до 1 и получить правильный IP-адрес в Windows 7. Плохая часть заключается в том, что для этого необходимо выполнить определение операционной системы и выбрать одну или другую.

Должен быть какой-то способ указать только IPv4. Возможно получение результата от DNS в сети, а не от самой рабочей станции?

1 Ответ

3 голосов
/ 30 марта 2010

Вам просто нужно пройтись по AddressList, глядя на AddressFamily, который установлен на InterNetwork

Dim IP4 = New List(Of IPAddress)(Dns.GetHostEntry(strComputer).AddressList).Find(Function(f) f.AddressFamily = Sockets.AddressFamily.InterNetwork)

Или более длинный путь:

    Dim IP4 As IPAddress
    Dim AL = Dns.GetHostEntry(strComputer).AddressList
    For Each A In AL
        If A.AddressFamily = Sockets.AddressFamily.InterNetwork Then
            IP4 = A
            Exit For
        End If
    Next
...