.Net IPAddress IPv4 - PullRequest
       17

.Net IPAddress IPv4

7 голосов
/ 12 января 2010

У меня есть следующий код:

Dim ipAdd As IPAddress = Dns.GetHostEntry(strHostname).AddressList(0)
Dim strIP As String = ipAdd.ToString()

Когда я преобразовываю в строку вместо адреса IPv4, например 192.168.1.0 или аналогичного, я получаю версию IPv6: fd80 :: 5dbe: 5d89: e51b: адрес d313.

Есть ли способ вернуть адрес IPv4 из типа IP-адрес?

Спасибо

Ответы [ 3 ]

15 голосов
/ 12 января 2010

Вместо того, чтобы безоговорочно брать первый элемент AddressList, вы можете взять первый IPv4-адрес:

var address = Dns.GetHostEntry(strHostname)
                 .AddressList
                 .First(ip => ip.AddressFamily == AddressFamily.InterNetwork);
2 голосов
/ 16 февраля 2011
Решение

dtb будет работать во многих ситуациях. Однако во многих случаях пользователи могут иметь несколько IP-адресов версии 4 в своей системе. Иногда это происходит из-за того, что у них есть «виртуальные» адаптеры (из приложений, таких как VirtualBox или VMWare), или из-за того, что к их компьютеру подключено более одного физического сетевого адаптера.

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

Чтобы получить список используемых IP-адресов v4, используйте код, подобный следующему:

'Получить массив, который содержит все доступные IP: Dim IPList () As IPAddress = Net.Dns.GetHostEntry (Net.Dns.GetHostName.ToString) .AddressList

'Copy valid IPs from IPList to FinalIPList
Dim FinalIPList As New ArrayList(IPList.Length)
For Each IP As IPAddress In IPList
    'We want to keep IPs only if they are IPv4 and not a 'LoopBack' device
    '(an InterNetwork AddressFamily indicates a v4 IP)
    If ((Not IPAddress.IsLoopback(IP)) And (IP.AddressFamily = AddressFamily.InterNetwork)) Then
        FinalIPList.Add(IP)
    End If
Next IP
0 голосов
/ 30 августа 2012

Для меня решение с предикатом «Первый» не работает должным образом, у меня работает код:

public static string GetLocalIP() 
        {
            string ipv4Address = String.Empty;

            foreach (IPAddress currrentIPAddress in Dns.GetHostAddresses(Dns.GetHostName()))
            {
                if (currrentIPAddress.AddressFamily.ToString() == System.Net.Sockets.AddressFamily.InterNetwork.ToString())
                {
                    ipv4Address = currrentIPAddress.ToString();
                    break;
                }
            }

            return ipv4Address;
        }
...