socket.gethostbyname启用ipv6时失败

2024-05-19 01:05:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个没有开关装置的办公室里有着最奇怪的行为。启用IPv6时,socket.gethostbyname()失败并且套接字.getaddrinfo()在长时间10秒超时后仅返回IPv6地址。如果我手动禁用IPv6并刷新租约,它们都会开始工作。在

最新的OSXMountainLion10.8.2,使用有线以太网。我最近注意到你不能关闭IPv6,只需设置为本地链接。您可以使用networksetup关闭它,但这只会持续到重新启动。在

有什么办法可以追踪吗?我想问题出在开关上,而不是我的机器,但不知道下一步该去哪里。在

我的v4 DHCP服务设置为8.8.8.8/8.8.4.4。在

(nimbis)bschott@ironman:django-nimbis$ sudo dscacheutil -flushcache
(nimbis)bschott@ironman:django-nimbis$ host www.google.com
www.google.com has address 74.125.131.99
www.google.com has address 74.125.131.103
www.google.com has address 74.125.131.104
www.google.com has address 74.125.131.147
www.google.com has address 74.125.131.106
www.google.com has address 74.125.131.105
www.google.com has IPv6 address 2607:f8b0:400c:c03::63

这里gethostbyname失败,getaddrinfo在长时间超时后返回。在

^{pr2}$

Ping失败。在

(nimbis)bschott@ironman:django-nimbis$ host www.google.com
www.google.com has address 173.194.75.103
www.google.com has address 173.194.75.99
www.google.com has address 173.194.75.104
www.google.com has address 173.194.75.106
www.google.com has address 173.194.75.105
www.google.com has address 173.194.75.147
www.google.com has IPv6 address 2607:f8b0:400c:c03::93
(nimbis)bschott@ironman:django-nimbis$ ping www.google.com
ping: cannot resolve www.google.com: Unknown host

关闭IPV6:

(nimbis)bschott@ironman:django-nimbis$ sudo networksetup -setv6off Ethernet
(nimbis)bschott@ironman:django-nimbis$ sudo dscacheutil -flushcache
(nimbis)bschott@ironman:django-nimbis$ ping www.google.com
ping: cannot resolve www.google.com: Unknown host
(nimbis)bschott@ironman:django-nimbis$ host www.google.com
www.google.com has address 173.194.75.103
www.google.com has address 173.194.75.99
www.google.com has address 173.194.75.104
www.google.com has address 173.194.75.106
www.google.com has address 173.194.75.105
www.google.com has address 173.194.75.147
www.google.com has IPv6 address 2607:f8b0:400c:c03::68

强制DHCP租约更新,ping,gethostbyname,getaddrinfo都可以正常工作。在

(nimbis)bschott@ironman:django-nimbis$ ping www.google.com
PING www.google.com (173.194.75.103): 56 data bytes
64 bytes from 173.194.75.103: icmp_seq=0 ttl=46 time=25.218 ms
64 bytes from 173.194.75.103: icmp_seq=1 ttl=46 time=23.944 ms
64 bytes from 173.194.75.103: icmp_seq=2 ttl=46 time=24.213 ms
64 bytes from 173.194.75.103: icmp_seq=3 ttl=46 time=78.480 ms
64 bytes from 173.194.75.103: icmp_seq=4 ttl=46 time=24.502 ms
^C
--- www.google.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 23.944/35.271/78.480/21.608 ms
bschott@ironman:django-nimbis$ python
Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.gethostbyname('www.google.com')
'173.194.75.147'
>>> socket.getaddrinfo('www.google.com', 80)
[(2, 1, 6, '', ('74.125.131.106', 80)), (2, 1, 6, '', ('74.125.131.147', 80)), (2, 2, 17, '', ('74.125.131.106', 80)), (2, 2, 17, '', ('74.125.131.99', 80)), (2, 1, 6, '',    ('74.125.131.99', 80)), (2, 2, 17, '', ('74.125.131.104', 80)), (2, 1, 6, '',  ('74.125.131.104', 80)), (2, 2, 17, '', ('74.125.131.105', 80)), (2, 1, 6, '', ('74.125.131.105', 80)), (2, 2, 17, '', ('74.125.131.103', 80)), (2, 1, 6, '', ('74.125.131.103', 80)), (2, 2, 17, '', ('74.125.131.147', 80)), (30, 1, 6, '', ('2607:f8b0:400c:c03::93', 80, 0, 0)), (30, 2, 17, '', ('2607:f8b0:400c:c03::93', 80, 0, 0))]

Tags: djangocomhostbytesaddresswwwgoogleping
1条回答
网友
1楼 · 发布于 2024-05-19 01:05:19

如果您启用了IPv6,您是否获得了正确的IPv4地址和默认路由?听起来有点像是NAT64用一些奇怪的设置运行。如果使用AI_ADDRCONFIG调用getaddrinfo,则不会返回IPv4地址。在

host实用程序不使用系统查找例程,而是使用自己的网络代码,因此dscacheutil -flushcache不会影响它。在

相关问题 更多 >

    热门问题