2010-09-02 56 views
1

socket.getfqdn()正常工作與IPv4地址,例如:什麼是Python中socket.getfqdn的IPv6替代方案?

>>> import socket 
>>> socket.getfqdn("8.8.8.8") 
'google-public-dns-a.google.com' 

但是,它並沒有使用IPv6地址。

>>> socket.getfqdn("2404:6800:8004::68") 
'2404:6800:8004::68' 
>>> socket.has_ipv6 
True 

我該如何做到這一點與IPv6?理想情況下只有標準庫中的模塊。

+0

奇數。我用第三方工具查找了地址,並找到了主機名。我想也許它是在幕後解析whois數據或其他東西。 我無法關閉它作爲無效,所以我想它必須保持開放。 – 2010-09-02 21:39:57

回答

3

你確定ipv6地址有任何與之相關的反向DNS嗎? 報告它沒有:

$ dig -x 2404:6800:8004::68 

; <<>> DiG 9.4.3-P5 <<>> -x 2404:6800:8004::68 
;; global options: printcmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 35573 
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 

;; QUESTION SECTION: 
;8.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.8.0.0.8.6.4.0.4.2.ip6.arpa. IN PTR 

;; Query time: 364 msec 
;; SERVER: 12.165.58.2#53(12.165.58.2) 
;; WHEN: Thu Sep 2 03:45:50 2010 
;; MSG SIZE rcvd: 90 

編輯:終於發現了反向DNS相關的IPv6地址。總之,works4me。

>>> import socket 
>>> socket.has_ipv6 
True 
>>> socket.getfqdn('2001:838:2:1::30:67') 
'gatey.sixxs.net' 

而且從DIG:

$ dig -x 2001:838:2:1::30:67 

; <<>> DiG 9.4.3-P5 <<>> -x 2001:838:2:1::30:67 
;; global options: printcmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 934 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1 

;; QUESTION SECTION: 
;7.6.0.0.0.3.0.0.0.0.0.0.0.0.0.0.1.0.0.0.2.0.0.0.8.3.8.0.1.0.0.2.ip6.arpa. IN PTR 

;; ANSWER SECTION: 
7.6.0.0.0.3.0.0.0.0.0.0.0.0.0.0.1.0.0.0.2.0.0.0.8.3.8.0.1.0.0.2.ip6.arpa. 43200 IN PTR gatey.sixxs.net. 

;; AUTHORITY SECTION: 
.      517204 IN  NS  e.root-servers.net. 
.      517204 IN  NS  m.root-servers.net. 
.      517204 IN  NS  a.root-servers.net. 
.      517204 IN  NS  l.root-servers.net. 
.      517204 IN  NS  c.root-servers.net. 
.      517204 IN  NS  h.root-servers.net. 
.      517204 IN  NS  j.root-servers.net. 
.      517204 IN  NS  g.root-servers.net. 
.      517204 IN  NS  f.root-servers.net. 
.      517204 IN  NS  i.root-servers.net. 
.      517204 IN  NS  d.root-servers.net. 
.      517204 IN  NS  b.root-servers.net. 
.      517204 IN  NS  k.root-servers.net. 

;; ADDITIONAL SECTION: 
a.root-servers.net.  604222 IN  A  198.41.0.4 

;; Query time: 383 msec 
;; SERVER: 12.165.58.2#53(12.165.58.2) 
;; WHEN: Thu Sep 2 03:55:03 2010 
;; MSG SIZE rcvd: 343 
1

猜猜是什麼:該地址沒有反向DNS。對於除挖一個更容易理解的輸出:

$ host 2404:6800:8004::68 
Host 8.6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.8.0.0.8.6.4.0.4.2.ip6.arpa not found: 3(NXDOMAIN) 

這裏確實有反向DNS地址的例子:

$ host 2001:470:0:64::2 
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.6.0.0.0.0.0.0.0.7.4.0.1.0.0.2.ip6.arpa domain name pointer ipv6.he.net. 

和變戲法似的,它與你的Python示例工作:

>>> import socket 
>>> socket.getfqdn("2001:470:0:64::2") 
'ipv6.he.net'