C#:当主机有超过1个ip时,将IP解析为主机名

时间:2016-04-16 05:28:57

标签: c# networking dns pcap.net

这是我在StackOverflow上的第一个问题。所以,如果有任何错误,请忽略它们。如果您遇到问题需要了解我的问题,请告诉我,我会尽力解释我的问题:)。

目前我正在尝试使用c#中的 pcap.net创建数据包嗅探器。在将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个yahoo.com的IP地址。

现在,我正在使用以下代码,这对于具有1个ip地址的主机(,例如,当我的ip源/目标为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(这是一个精确的数据网格)以显示结果。

我的问题是 - 有没有办法找出源IP或目标IP是否属于未知主机的IP列表(,例如,如果我的源IP或目标IP是206.190。 36.45,我怎么知道IP属于yahoo.com )?

更新:我正在网上冲浪找到问题的解决方案,我找到了这个链接How to retrieve a list of websites from an IP address?。这部分解决了我的问题,因为即使遵循此方法,仍有一些IP地址无法解析为其主机名。由于我正在制作数据包嗅探器,因此这种方法可能不是最好的方法。因为我想在GUI中加载值时(我的意思是我的datagrid),实时显示用户,ip地址的主机名。我很高兴知道 - 如果链接中提供的解决方案是解决我问题的唯一方法。

1 个答案:

答案 0 :(得分:1)

你可以试试rDNS。

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

但如上所述:

  

并非所有IP地址都有反向条目。