Dns.GetHostAddress (hostname) Нет такого устройства или адреса Исключение в Ubuntu 16.04 - PullRequest
0 голосов
/ 16 мая 2018

У меня есть проект .net core 2.0, который пытается получить имя хоста и IP-адрес хоста с Linux-машины.Программа хорошо работает в Mac OS и Windows, но не в Linux - Ubuntu 16.04

public class Program
{
    public static void Main(string[] args)
    {
        var HostName = Dns.GetHostName();
        Console.WriteLine("Host name : " + HostName);
        var HostAddress = GetHostAddress(HostName);
        Console.WriteLine("Host address : " + HostAddress);
    }

    private static string GetHostAddress(string hostName)
    {
        try
        {
            var addressList = Dns.GetHostAddresses(hostName);

            foreach (IPAddress address in addressList)
            {
                Console.WriteLine("IP Address : " + address.ToString());
                if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    string ip = address.ToString();
                    if (!ip.StartsWith("127."))
                        return ip;
                }
            }

            return "127.0.0.1";
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

    }
}

Исключение, которое я получил,

ubuntu @ ip-10-40-121-185: ~ / home / IP $ dotnet IP.dll

Имя хоста: ip-10-40-121-185

System.Net.Internals.SocketExceptionFactory + ExtendedSocketException (0x00000005): Нет такогоустройство или адрес

в System.Net.Dns.InternalGetHostByName (строка hostName, логическое значение includeIPv6)

в System.Net.Dns.GetHostAddresses (строка hostNameOrAddress)

в IP.Program.GetHostAddress (String hostName) в /Users/jliu/RiderProjects/IpTest/IP/Program.cs:line 34

Необработанное исключение: System.Net.Internals.SocketExceptionFactory + ExtendedSocketException: нет такого устройства или адреса

в System.Net.Dns.InternalGetHostByName (строка hostName, логическое значение includeIPv6)

в System.Net.Dns.GetHostAddresses (строка hostNameOrAddress)

в IP.Program.GetHostAddress (String hostName) в / Users / jliu / RiderProjects / IpTest / IP / Program.cs: строка 52

в IP.Program.Main (String [] args) в /Users/jliu/RiderProjects/IpTest/IP/Program.cs:line 20 Прервано (ядро сброшено)

Есть идеи, как это исправить или какая-нибудь альтернатива для получения IP на машине с Linux?Спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

Получить ответ из другого потока Получить локальный IP-адрес , который работает для меня

Спасибо за решение от @Gerardo H https://stackoverflow.com/a/28621250/4861127

    internal static string GetLocalIPv4(NetworkInterfaceType _type)
    {
        string output = "";
        foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
            {
                IPInterfaceProperties adapterProperties = item.GetIPProperties();

                if (adapterProperties.GatewayAddresses.FirstOrDefault() != null)
                {
                    foreach (UnicastIPAddressInformation ip in adapterProperties.UnicastAddresses)
                    {
                        if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            output = ip.Address.ToString();
                        }
                    }
                }
            }
        }

        return output;
    }
...