问题是使用httplib的urllib正在查询AAAA记录。
我想避免这种情况。有没有一个很好的方法呢?
>>> import socket
>>> socket.gethostbyname('www.python.org')
'82.94.164.162'
21:52:37.302028 IP 192.168.0.9.44992 > 192.168.0.1.53: 27463+ A? www.python.org. (32)
21:52:37.312031 IP 192.168.0.1.53 > 192.168.0.9.44992: 27463 1/0/0 A 82.94.164.162 (48)
python /usr/lib/python2.6/urllib.py -t http://www.python.org >/dev/null 2>&1
21:53:44.118314 IP 192.168.0.9.40669 > 192.168.0.1.53: 32354+ A? www.python.org. (32)
21:53:44.118647 IP 192.168.0.9.40669 > 192.168.0.1.53: 50414+ AAAA? www.python.org. (32)
21:53:44.122547 IP 192.168.0.1.53 > 192.168.0.9.40669: 32354 1/0/0 A 82.94.164.162 (48)
21:53:44.135215 IP 192.168.0.1.53 > 192.168.0.9.40669: 50414 1/0/0 AAAA[|domain]
答案 0 :(得分:6)
正确答案是:
http://docs.python.org/library/socket.html
Python套接字库使用以下内容:
socket.socket([family [,type [,proto]]]) 使用给定的地址系列,套接字类型和协议号创建一个新套接字。地址族应为AF_INET(默认值),AF_INET6或AF_UNIX。套接字类型应该是SOCK_STREAM(默认值),SOCK_DGRAM或者其他SOCK_常量之一。协议号通常为零,在这种情况下可以省略。
/* Supported address families. */
#define AF_UNSPEC 0
#define AF_INET 2 /* Internet IP Protocol */
#define AF_INET6 10 /* IP version 6 */
默认情况下它使用0,如果用2调用它,它只会查询A记录。
请记住在您的应用中缓存resolv结果是一个非常糟糕的想法。永远不要这样做!
答案 1 :(得分:0)
请看这里:how-do-i-resolve-an-srv-record-in-python
一旦你解决了正确的A ip,请在你的请求中使用它,而不是dns。