由gethostbyname()检索的IP地址与连接到的浏览器不同

时间:2013-06-03 21:09:53

标签: dns browser ip-address pcap gethostbyname

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

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

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

如果是这种情况,为什么DNS服务器会为google.com返回不同的ips,而其他人则相同?在gethostbyname()和Web浏览器的请求之间有什么不同(如果有的话)?

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

顺便说一下,您应该考虑使用getaddrinfo()代替gethosybyname()gethostbyname()已弃用且已过时。最重要的是,它无法返回IPv6地址。

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

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