初心者はそんなことのやり方も知りません
ググってみたら最初に出てきたのが
Ruby, Pythonで並列に逆引きを行う - bkブログ
Ruby と Python の threading の比較を resolve でしてるページでした
で、中で使ってるのは socket.gethostbyaddr
そっか、socket かと思い試してみました
>>> import socketあら、1 つしか答えてくれません
>>> socket.gethostbyaddr('www.google.com')
('jp-in-f99.google.com', [], ['66.249.89.99'])
>>> socket.gethostbyname('www.google.com')
'66.249.89.99
$ host www.google.comこういうの期待してたんですが
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 66.249.89.99
www.l.google.com has address 66.249.89.147
www.l.google.com has address 66.249.89.104
www.l.google.com has IPv6 address 2001:4860:c004::68
あれー、と思って検索語を変更 -> python dns
dnspython home page ってページが top に
ん〜、だったら最初から pypi 使えよって話な気もしますが
インストールしてみて
>>> import dns.resolverん〜、何か可愛くない
>>> [ i.address for i in dns.resolver.query('www.google.com') ]
['66.249.89.99', '66.249.89.104', '66.249.89.147']
>>> [ i.address for i in dns.resolver.query('mail.google.com') ]
一歩戻って gethostbyname でググると
Manpage of GETHOSTBYNAME ってだから man 見ろよと
でも
gethostbyname*() と gethostbyaddr*() は過去のものである。アプリケーションでは、代わりに getaddrinfo(3) と getnameinfo(3) を使用すること。と書いてあります
>>> import socketおぉ、こ、これは
>>> socket.getaddrinfo('www.google.com', 80)
[(2, 1, 6, '', ('66.249.89.147', 80)), (2, 2, 17, '', ('66.249.89.147', 80)), (2, 3, 0, '', ('66.249.89.147', 80)), (2, 1, 6, '', ('66.249.89.104', 80)), (2, 2, 17, '', ('66.249.89.104', 80)), (2, 3, 0, '', ('66.249.89.104', 80)), (2, 1, 6, '', ('66.249.89.99', 80)), (2, 2, 17, '', ('66.249.89.99', 80)), (2, 3, 0, '', ('66.249.89.99', 80)), (10, 1, 6, '', ('2001:4860:c004::68', 80, 0, 0)), (10, 2, 17, '', ('2001:4860:c004::68', 80, 0, 0)), (10, 3, 0, '', ('2001:4860:c004::68', 80, 0, 0))]
これは socket の reference を見ろということだろということで
>>> import socket_ex って
>>> socket.gethostbyname_ex('www.google.com')
('www.l.google.com', ['www.google.com'], ['66.249.89.147', '66.249.89.99', '66.249.89.104'])
なんか、まぁ、これで、解決したのかしら...
0 件のコメント:
コメントを投稿