2

問題は、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]
4

2 に答える 2

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 レコードのみを照会します。

アプリで解決結果をキャッシュすることは、本当に悪い考えです。絶対にしないでください!

于 2009-10-09T22:43:12.020 に答える
0

ここを見てください: how-do-i-resolve-an-srv-record-in-python

正しい A IP を解決したら、DNS の代わりにそれをリクエストで使用します。

于 2009-10-08T22:07:10.383 に答える