2011-10-20 60 views
7

我试图反向DNS使用蟒蛇socket.gethostbyaddr(),它返回“未知主机”对于一些值的IP地址列表,但使用挖同一个IP返回的主机名。另外,挖掘似乎比使用Python模块快得多,是否有任何具体原因呢?难度使用Python的socket.gethostbyaddr()

import socket 

# This returns 'Unknown Host' 
name, alias, addresslist = socket.gethostbyaddr('114.143.51.197') 
+1

当我反转4.2.2.2时,gethostbyaddr适合我。请张贴代码有问题 –

+0

进口插座 名,别名,AddressList中= socket.gethostbyaddr(“114.143.51.197”) 这将返回“未知主机” 而挖-x 114.143.51.197 +短 给我主机名。 我使用的DNS解析名称服务器是8.8.8.8和8.8.4.4,仍然没有运气。 – bilkulbekar

回答

7

对不起,但你错了。 114.143.51.197没有PTR记录...因此socket.gethostbyaddr()应该抛出一个错误......你当然需要一个陷阱socket.herror

>>> def lookup(addr): 
...  try: 
...   return socket.gethostbyaddr(addr) 
...  except socket.herror: 
...   return None, None, None 
... 
>>> name,alias,addresslist = lookup('4.2.2.2') 
>>> print name 
vnsc-bak.sys.gtei.net 
>>> name,alias,addresslist = lookup('114.143.51.197') 
>>> print name 
None 
>>> 

为114.143.51.197 DNS反向查找一个try/except条款...请注意,它并没有一个有效的PTR记录

[[email protected] ~]$ dig @8.8.8.8 -x 114.143.51.197 

; <<>> DiG 9.6-ESV-R4 <<>> @8.8.8.8 -x 114.143.51.197 
; (1 server found) 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 4735 
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 

;; QUESTION SECTION: 
;197.51.143.114.in-addr.arpa. IN  PTR 

;; AUTHORITY SECTION: 
114.in-addr.arpa.  1800 IN  SOA  ns1.apnic.net. read-txt-record-of-zone-first-dns-admin.apnic.net. 17812 7200 1800 604800 172800 

;; Query time: 182 msec 
;; SERVER: 8.8.8.8#53(8.8.8.8) 
;; WHEN: Tue Nov 22 05:11:36 2011 
;; MSG SIZE rcvd: 134 

[[email protected] ~]$ python 
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) 
[GCC 4.3.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import socket 
>>> socket.gethostbyaddr('114.143.51.197') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
socket.herror: (1, 'Unknown host') 
>>> 

这是一个有效PTR记录应该是什么样子......

[[email protected] ~]$ dig -x 4.2.2.2 

; <<>> DiG 9.6-ESV-R4 <<>> -x 4.2.2.2 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61856 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1 

;; QUESTION SECTION: 
;2.2.2.4.in-addr.arpa.   IN  PTR 

;; ANSWER SECTION: 
2.2.2.4.in-addr.arpa. 86400 IN  PTR  vnsc-bak.sys.gtei.net. 

;; AUTHORITY SECTION: 
2.4.in-addr.arpa.  86400 IN  NS  dnsauth2.sys.gtei.net. 
2.4.in-addr.arpa.  86400 IN  NS  dnsauth1.sys.gtei.net. 
2.4.in-addr.arpa.  86400 IN  NS  dnsauth3.sys.gtei.net. 

;; ADDITIONAL SECTION: 
dnsauth1.sys.gtei.net. 1800 IN  A  4.2.49.2 

;; Query time: 308 msec 
;; SERVER: 127.0.0.1#53(127.0.0.1) 
;; WHEN: Tue Nov 22 05:10:16 2011 
;; MSG SIZE rcvd: 158 

[[email protected] ~]$ python 
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) 
[GCC 4.3.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import socket 
>>> socket.gethostbyaddr('4.2.2.2') 
('vnsc-bak.sys.gtei.net', [], ['4.2.2.2']) 
>>> 
+0

我明白了..我以为挖掘提供了我的主机名,但它没有。谢谢 – bilkulbekar