سؤال

أحاول عكس نظام أسماء النطاقات (DNS) لقائمة عناوين IP باستخدام المقبس.gethostbyaddr() في بيثون، والذي يُرجع "مضيف غير معروف" لبعض القيم، ولكن استخدام dig لنفس عنوان IP يُرجع اسم المضيف.أيضًا، يبدو أن dig أسرع بكثير من استخدام وحدة python، فهل هناك أي أسباب محددة لذلك؟

import socket

# This returns 'Unknown Host' 
name, alias, addresslist = socket.gethostbyaddr('114.143.51.197')
هل كانت مفيدة؟

المحلول

أنا آسف، ولكنك مخطئ.114.143.51.197 لا يحتوي على سجل PTR...لذلك socket.gethostbyaddr() يجب أن يلقي خطأ...أنت بالتأكيد بحاجة إلى try / except الشرط الذي الفخاخ ل 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
>>>

البحث العكسي عن DNS لـ 114.143.51.197...لاحظ أنه ليس لديه صالح PTR سِجِلّ

[mpenning@Bucksnort ~]$ 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

[mpenning@Bucksnort ~]$ 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 يجب أن يبدو السجل...

[mpenning@Bucksnort ~]$ 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

[mpenning@Bucksnort ~]$ 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'])
>>>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top