Это мой первый вопрос на 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). И я был бы рад узнать - если решение, указанное в ссылке, является единственным способом решить мою проблему.
Ваша ссылка очень полезна. Благодарю. «не все IP-адреса имеют обратную запись» - на самом деле, именно по этой причине у моего кода есть ограничения. То же самое можно сказать и о nslookup. Но у меня вопрос: как веб-сайты, такие как domaintools, разрешают ips? Если они используют какой-то файл, где я могу получить этот файл? На самом деле именно поэтому я начал думать и придумал этот вопрос. –
Я попытался поддержать ваш ответ, но он не работает из-за моей репутации. Пожалуйста, не возражайте. –
Я предполагаю, что эти сайты содержат какие-то обратные таблицы.Обратите внимание, что они также имеют ограничения: « Ограничения инструмента обратного IP-поиска: Результаты включают в себя все .com, .net, .org, .biz, .us и .info домены, а также любые другие доменные имена gTLD или ccTLD, перечисленные в IP-адрес, о котором мы знаем. Домены, добавленные к IP-адресу, обновляются ежедневно. Домены, удаленные с любого конкретного IP-адреса, могут не отображаться на срок до двух недель. « – brickner