2009-10-08 2 views
2

문제는 httplib을 사용하는 urllib이 AAAA 레코드를 쿼리하고 있다는 것입니다.파이썬 httplib 라이브러리가 A 요청만을 사용하도록하는 법

나는 것을 방지하기 위해 싶습니다. 그것을 할 수있는 좋은 방법이 있습니까? 여기

>>> 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] 

답변

6

정답은 :

http://docs.python.org/library/socket.html

파이썬 소켓 라이브러리 다음 사용 :

socket.socket ([가족 [입력을 [프로토]]]) 만들기 지정된 주소 패밀리, 소켓 타입 및 프로토콜 번호를 사용하는 새로운 소켓 주소 패밀리는 AF_INET (기본값), AF_INET6 또는 AF_UNIX 여야합니다. 소켓 유형은 SOCK_STREAM (기본값), SOCK_DGRAM 또는 다른 SOCK_ 상수 중 하나 여야합니다. 프로토콜 번호는 일반적으로 0이며이 경우 생략 할 수 있습니다.

/* Supported address families. */ 
#define AF_UNSPEC  0 
#define AF_INET   2  /* Internet IP Protocol   */ 
#define AF_INET6  10  /* IP version 6     */ 

기본적으로 0을 사용하고 2로 호출하면 A 레코드 만 쿼리합니다.

앱의 해상도 결과를 캐싱하는 것이 정말 잘못된 생각입니다. 절대하지 마!

0

봐는 : how-do-i-resolve-an-srv-record-in-python

대신 DNS를, 귀하의 요청에 사용할 올바른 IP를 해결하면.

+0

정말 나쁜 습관입니다. 예를 들어 TTL 60 초를 가진 A 레코드를 가지고 있다면 코드를 존중해야합니다. 그 동안 IP를 변경하면 어떻게됩니까? 당신의 프로그램은 실패 할 것이고 왜 아무도 그 이유를 모른다. – Istvan