2016-04-16 4 views
0

Это мой первый вопрос на StackOverflow. Поэтому, если есть какие-либо ошибки, пожалуйста, игнорируйте их. Если вы столкнулись с проблемой, чтобы понять мой вопрос, пожалуйста, дайте мне знать, я попробую лучше всего объяснить мою проблему :).C#: разрешить IP-адрес в имени хоста, если хост имеет более 1 ip

В настоящее время я пытаюсь создать сниффер пакетов, используя pcap.net в C#. Я столкнулся с проблемой при разрешении IP-адресов в именах хостов.

Вот моя проблема: Когда веб-сайт имеет более чем 1 IP адрес, например, при вводе команды в командной строке

nslookup yahoo.com 

я получил следующий вывод

DNS request timed out. 
    timeout was 2 seconds. 
*** Can't find server name for address 192.168.0.1: Timed out 
Server: google-public-dns-a.google.com 
Address: 8.8.8.8 

Non-authorative answer: 
Name: yahoo.com 
Addresses: 206.190.36.45, 98.139.183.24, 98.138.253.109 

Итак, ясно, что у меня более 1 IP-адрес для yahoo.com.

Теперь я использую следующий фрагмент кода, который отлично работает для хостов, имеющих 1 IP-адрес (например, когда у меня есть источник ip/destination, как 8.8.8.8, он дает мне результат google -public-dns-a.google.com)

private void PacketHandler(Packet packet) 
{ 
     IpV4Datagram ip = packet.Ethernet.IpV4; 

     string sourceHost = ip.Source.ToString(); 
     string destinationHost = ip.Destination.ToString(); 

     #region Code to get the host name of the source ip and the destination ip 

     string tempSourceIP = sourceHost; 
     string tempDestinationIP = destinationHost; 
     IPHostEntry source_ipHostEntry, destination_ipHostEntry; 
     try 
     { 
      source_ipHostEntry = Dns.GetHostEntry(sourceHost); 
      destination_ipHostEntry = Dns.GetHostEntry(destinationHost); 
      sourceHost = tempSourceIP + " :: (" + source_ipHostEntry.HostName + ")"; 
      destinationHost = tempDestinationIP + " :: (" + destination_ipHostEntry.HostName + ")"; 

     } 
     catch (Exception) 
     { 
      sourceHost = tempSourceIP; 
      destinationHost = tempDestinationIP; 
     } 
     #endregion 
} 

Я добавив результаты sourceHost и destinationHost к GUI (это DataGrid быть точным) для отображения результатов.

Мой вопрос: есть ли способ узнать, принадлежит ли исходный IP-адрес или IP-адрес назначения к списку IP-адресов неизвестного узла (например, если мой IP-адрес источника или IP-адрес назначения 206.190.36.45 , как я могу узнать, что IP принадлежит yahoo.com)?

ОБНОВЛЕНИЕ: Я занимался серфингом в Интернете, чтобы найти решение моего вопроса, и нашел эту ссылку How to retrieve a list of websites from an IP address?. Это частично решает мою проблему, потому что все еще есть некоторые IP-адреса, которые не могут быть разрешены для их имен хостов даже после выполнения этого метода. И поскольку я делаю сниффер пакетов, этот метод может быть не лучшим. Поскольку я хочу показать пользователю имя хоста ip-адреса в реальном времени, когда значения загружаются в графический интерфейс (я имею в виду мой datagrid). И я был бы рад узнать - если решение, указанное в ссылке, является единственным способом решить мою проблему.

ответ

1

Вы можете попробовать rDNS.

https://en.wikipedia.org/wiki/Reverse_DNS_lookup

Но, как упоминалось здесь:

не все IP-адреса имеют обратную запись.

+0

Ваша ссылка очень полезна. Благодарю. «не все IP-адреса имеют обратную запись» - на самом деле, именно по этой причине у моего кода есть ограничения. То же самое можно сказать и о nslookup. Но у меня вопрос: как веб-сайты, такие как domaintools, разрешают ips? Если они используют какой-то файл, где я могу получить этот файл? На самом деле именно поэтому я начал думать и придумал этот вопрос. –

+0

Я попытался поддержать ваш ответ, но он не работает из-за моей репутации. Пожалуйста, не возражайте. –

+0

Я предполагаю, что эти сайты содержат какие-то обратные таблицы.Обратите внимание, что они также имеют ограничения: « Ограничения инструмента обратного IP-поиска: Результаты включают в себя все .com, .net, .org, .biz, .us и .info домены, а также любые другие доменные имена gTLD или ccTLD, перечисленные в IP-адрес, о котором мы знаем. Домены, добавленные к IP-адресу, обновляются ежедневно. Домены, удаленные с любого конкретного IP-адреса, могут не отображаться на срок до двух недель. « – brickner