根据评论内容,使用dig -x 114.143.51.197+short可以给出主机名。
然而,我很抱歉地告诉您,114.143.51.197没有PTR记录... 因此socket.gethostbyaddr()
应该会报错... 要正确处理这种情况,请添加try
/except
子句以捕获socket.herror
异常
>>> def dns_ptr_lookup(addr):
... try:
... return socket.gethostbyaddr(addr)
... except socket.herror:
... return None, None, None
...
>>>
>>> name,alias,addresslist = dns_ptr_lookup('4.2.2.2')
>>> print(name)
vnsc-bak.sys.gtei.net
>>>
>>>
>>> name,alias,addresslist = dns_ptr_lookup('114.143.51.197')
>>> print(name)
None
>>>
对于114.143.51.197的DNS反向查找...请注意它没有有效的PTR
记录。
[mpenning@Bucksnort ~]$ dig @8.8.8.8 -x 114.143.51.197
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
[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
2.2.2.4.in-addr.arpa. 86400 IN PTR vnsc-bak.sys.gtei.net.
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.
dnsauth1.sys.gtei.net. 1800 IN A 4.2.49.2
[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'])
>>>