这是我关于 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)?
更新:我在网上冲浪以找到我的问题的解决方案,我找到了这个链接如何从 IP 地址检索网站列表?. 这部分解决了我的问题,因为即使按照此方法,仍有一些 IP 地址无法解析为其主机名。而且由于我正在制作数据包嗅探器,因此这种方法可能不是最好的方法。因为我想在 GUI 中加载值时实时向用户显示 IP 地址的主机名(我的意思是我的数据网格)。我很高兴知道 - 如果链接中提供的解决方案是解决我的问题的唯一方法。