2011-10-20 18 views
7

Tôi đang cố gắng đảo ngược danh sách IP bằng cách sử dụng socket.gethostbyaddr() trong python, trả về 'Không xác định Máy chủ' cho một số giá trị, nhưng sử dụng tính năng đào cho cùng một ip trả về Tên máy chủ . Ngoài ra, đào có vẻ nhanh hơn đáng kể so với sử dụng mô-đun python, có lý do cụ thể nào không?Khó sử dụng socket.gethostbyaddr của Python()

import socket 

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

gethostbyaddr hoạt động tốt cho tôi khi tôi đảo ngược 4.2.2.2. Xin vui lòng gửi mã mà có vấn đề –

+0

nhập tên ổ cắm , bí danh, addresslist = socket.gethostbyaddr ('114.143.51.197') này lợi nhuận 'Unknown Host' trong khi đào -x 114.143.51.197 + ngắn mang lại cho tôi tên máy chủ. Máy chủ định danh cho độ phân giải DNS tôi đã sử dụng là 8.8.8.8 và 8.8.4.4, vẫn không có may mắn. – bilkulbekar

Trả lời

7

Tôi rất tiếc, nhưng bạn đã nhầm. 114.143.51.197 không có một bản ghi PTR ... do đó socket.gethostbyaddr() nên ném ra một lỗi ... bạn chắc chắn cần một khoản try/except mà bẫy cho 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 
>>> 

tra cứu DNS ngược cho 114.143.51.197 ... lưu ý rằng nó không có một kỷ lục PTR hợp lệ

[[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') 
>>> 

Đây là những gì một kỷ lục giá trị PTR nên trông giống như ...

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

Tôi hiểu rồi .. Tôi nghĩ việc đào đã cung cấp cho tôi tên máy chủ trong khi nó không được. Cảm ơn – bilkulbekar