0

我编写了一个测试程序来捕获给定域名的数据包。我使用 gethostbyname() 来检索 IP 地址,并使用 pcap 来捕获发往该 IP 地址的数据包。pcap_loop() 计数设置为 -1,因此它应该继续捕获。

理论上,从我的电脑发送到该 IP 地址的所有数据包都将被捕获,无论该域名是通过 Web 浏览器访问还是仅通过 ping 它,对吗?

经测试,虽然很多网站都是这样,但是对于google或者ebay这样的高流量网站是不适用的。这意味着如果我 ping 从 gethostbyname() 检索到的 IP 地址,程序将捕获 ping 数据包,但如果我在 firefox 上访问 google.com,则不会捕获任何数据包。这表明同一域名(如 google.com)可能有不同的 IP 地址。

如果是这样,为什么 DNS 服务器为 google.com 返回不同的 ips 而其他的却是相同的?来自 gethostbyname() 的请求和来自 Web 浏览器的请求之间有什么不同(如果有的话)?

提前致谢。

4

1 回答 1

1

如果给定的域名解析到多个 IP 地址,您需要确保将捕获过滤器设置为捕获所有这些地址,因为您永远不知道 Web 浏览器会选择哪一个。如果您只过滤(例如)返回的第一个,那么您将选择与 Web 浏览器相同的机会只有 1 分之一(其中 n 是地址数)。

顺便说一句,您应该考虑使用getaddrinfo()而不是gethosybyname(). gethostbyname()已弃用和过时。最重要的是,它无法返回 IPv6 地址。

gethostbyname()将解析的 IP 地址列表作为数组返回......但只有 IPv4 的。

getddrinfo()将解析的 IP 地址列表作为链表返回。

于 2013-06-04T14:10:42.753 回答