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

Dns gethostbyname()检索的IP地址与连接到的浏览器不同,dns,browser,ip-address,pcap,gethostbyname,Dns,Browser,Ip Address,Pcap,Gethostbyname,我编写了一个测试程序来捕获给定域名的数据包。 我使用gethostbyname()检索ip地址,并使用pcap捕获发送到该ip地址的数据包。pcap_loop()计数被设置为-1,因此应该继续捕获 理论上,从我的电脑发送到那个ip地址的所有数据包都会被捕获,不管那个域名是通过网络浏览器访问的,还是仅仅通过ping来访问的,对吗 经过测试,尽管这对许多网站都适用,但它不适用于像谷歌或易趣这样的高流量网站。这意味着如果我ping从gethostbyname()检索到的ip地址,程序将捕获ping数据

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

理论上,从我的电脑发送到那个ip地址的所有数据包都会被捕获,不管那个域名是通过网络浏览器访问的,还是仅仅通过ping来访问的,对吗

经过测试,尽管这对许多网站都适用,但它不适用于像谷歌或易趣这样的高流量网站。这意味着如果我ping从gethostbyname()检索到的ip地址,程序将捕获ping数据包,但是如果我在firefox上访问google.com,则不会捕获任何数据包。这表明同一域名可能有不同的ip地址,比如google.com

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


提前感谢。

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

顺便说一下,您应该考虑使用<代码> GATADIN()/<代码>而不是<代码> GethOsByNyMeMe()/<代码>。code>gethostbyname()已弃用和过时。最重要的是,它无法返回IPv6地址

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


getddrinfo()
以链表的形式返回解析的IP地址列表。

您是在捕获由
gethostbyname()返回的所有IP地址的通信量,还是仅捕获第一个IP地址的通信量?gethostbyname()不是在结构hostent中只返回一个IP地址吗?不,它返回一个IP地址数组。顺便说一下,您应该考虑使用<代码> GETADDIN()/<代码>而不是<代码> GethOsByNyMeMe()/<代码>。code>gethostbyname()
已弃用和过时。我认为gethostbyname同时返回IPv4和IPv6。请看showip.c:对我有用。@JohnMudd:no,您引用的示例实际上使用了
getaddrinfo()
。该页面甚至说“尤其是,gethostbyname()不能很好地与IPv6配合使用。”
getaddrinfo()
绝对是应该使用的。谢谢,我错了。