C# Dns.GetHostEntry () - исключение: такой хост не известен - PullRequest
0 голосов
/ 16 января 2020

Из документации Dns.GetHostEntry () Разрешает имя хоста или IP-адрес экземпляру IPHostEntry . Может ли кто-нибудь помочь мне понять, почему эта функция не работает для некоторого внешнего IP-адреса (она работает для внутреннего IP-адреса) и команда ping работает нормально?

Мой код:

using System;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static int Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("Please enter a host name or IP address");
                Console.WriteLine("Usage: ConsoleApplication1 8.8.8.8");
                return 1;
            }

            string addr = args[0];

            try
            {
                IPHostEntry host = Dns.GetHostEntry(addr);
                Console.WriteLine($"GetHostEntry({addr}) returns HostName: {host.HostName}");
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e);
            }

            return 0;
        }

    }
}

Вывод:

C:\Users\Administrator\Desktop>ping stackoverflow.com

Pinging stackoverflow.com [151.101.1.69] with 32 bytes of data:
Reply from 151.101.1.69: bytes=32 time=35ms TTL=57
Reply from 151.101.1.69: bytes=32 time=16ms TTL=57
Reply from 151.101.1.69: bytes=32 time=16ms TTL=57
Reply from 151.101.1.69: bytes=32 time=16ms TTL=57

Ping statistics for 151.101.1.69:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 16ms, Maximum = 35ms, Average = 20ms

C:\Users\Administrator\Desktop>ConsoleApplication1.exe 151.101.1.69
Exception: System.Net.Sockets.SocketException (0x80004005): No such host is known
   at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
   at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
   at ConsoleApplication1.Program.Main(String[] args)

C:\Users\Administrator\Desktop>ping 151.101.1.69

Pinging 151.101.1.69 with 32 bytes of data:
Reply from 151.101.1.69: bytes=32 time=27ms TTL=57
Reply from 151.101.1.69: bytes=32 time=16ms TTL=57
Reply from 151.101.1.69: bytes=32 time=16ms TTL=57
Reply from 151.101.1.69: bytes=32 time=17ms TTL=57

Ping statistics for 151.101.1.69:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 16ms, Maximum = 27ms, Average = 19ms

Я нашел решение, меняющее файл

C: \ Windows \ System32 \ drivers \ etc \ hosts

Добавление строки:

151.101.1.69 stackoverflow.com

Это работает после этого изменения

C:\Users\Administrator\Desktop>ConsoleApplication1.exe 151.101.1.69
GetHostEntry(151.101.1.69) returns HostName: stackoverflow.com

На мой взгляд, изменение файла hosts не является хорошим решением для решения этой проблемы. Кто-нибудь знает лучшее решение, чтобы решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...