Использование «System.Net.Dns.GetHostEntry ()» для получения IP-адреса веб-сайта даст другие результаты по сравнению с некоторыми веб-сайтами проверки IP-адресов. - PullRequest
7 голосов
/ 28 октября 2019

Я работаю над консольным приложением ac #, и внутри моего консольного приложения у меня есть следующий код, чтобы получить IP для веб-сайта: -

using System.Net
using System.Web;
using System.IO;

namespace MyConsoleApp
{
    class Program
    {
      static async Task Main(string[] args)
        {
          IPHostEntry hosten = Dns.GetHostEntry("www." + website);
          if (hosten.AddressList.Count() >= 1)
              {
               string ip = hosten.AddressList[0].ToString();

, но IP, который я получу длявеб-сайт будет отличаться от IP-адреса, который я получу от некоторых онлайн-сайтов проверки IP-адресов, таких как https://www.site24x7.com/find-ip-address-of-web-site.html.., поэтому использует System.Net.Dns.GetHostEntry() доверенное устройство для определения IP-адреса веб-сайта? если ответ «да», то почему я получаю разные IP-адреса с онлайн-сайтов проверки IP-адресов?

Ответы [ 4 ]

5 голосов
/ 02 ноября 2019

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

Почему? Поскольку DNS является иерархически распределенной региональной базой данных, Google может иметь IP-адрес (а) в Китае, и это означает, что он будет регистрироваться в основном на DNS-серверах этого региона. Поэтому наивные запросы на IP-адреса Google из Китая будут производить эти / эти IP-адреса, а запросы из Австралии - другие / другие IP-адреса.

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

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

Теперь, что касается вашего кода, когда вы делаете:

hosten.AddressList[0]

вы берете только первый IP-адрес в этом списке, который может быть only IPесли этот конкретный хост имеет только один, но может быть первым из нескольких разрешенных IP-адресов этого хоста. Вы должны проверить все элементы AddressList.

3 голосов
/ 31 октября 2019

Многие веб-сайты будут иметь несколько IP-адресов, так как они размещены в нескольких местах. Для дальнейшего прочтения ознакомьтесь с разделом «Сети доставки контента»

Это похоже на вопрос «Почему в Pizza Hut так много телефонных номеров?»Потому что, хотя они служат одному и тому же, их много, и вы захотите поговорить с ближайшим к вам.

0 голосов
/ 06 ноября 2019

Ваш ответ: С естественным DNS-запросом Вы используете свой локальный компьютер DNS-сервер. Но вы не можете быть уверены, что веб-сайты используют другой DNS-сервер для поиска IP с тысяч DNS-сервера. Пример Я использовал альтернативный DNS 198.101.242.72 23.253.163.53 для правильного результата запроса так же, как этот веб-сайт!

Пожалуйста, добавьте пакет DnsClient Nuget в ваше приложение. Потому что для профессионального DNS-запроса вам нужно использовать детали чего-то, например DNS-сервер. нормальный запрос у вас нет такой возможности.

        static void Main(string[] args)
        {
            var client = new LookupClient(new IPEndPoint(IPAddress.Parse("198.101.242.72"),53));
            var result = client.Query("www.nasill.com", QueryType.A);

            foreach (var aRecord in result.Answers.ARecords())
            {
                Console.WriteLine("Correct Result is: "+aRecord.Address);
            }

            IPHostEntry hosten = Dns.GetHostEntry("www.nasill.com");
            if (hosten.AddressList.Count() >= 1)
            {
                string ip = hosten.AddressList[0].ToString();
                Console.WriteLine("Your computer dns says: "+ip);
            }

            Console.ReadLine();

        }
0 голосов
/ 06 ноября 2019

Просто, если вы запустите свой код на той же IP-области https://www.site24x7.com/find-ip-address-of-web-site.html, вы получите тот же результат, оба приведенных выше ответа верны и имеют техническое объяснение для этого.

...