2010-09-02 2 views
1

socket.getfqdn() fonctionne bien avec les adresses IPv4, par exemple:Quelle est l'alternative IPv6 à socket.getfqdn en Python?

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

Cependant, il ne fonctionne pas pour les adresses IPv6.

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

Comment puis-je faire cela avec IPv6? Idéalement avec seulement des modules dans la bibliothèque standard.

+0

Odd. J'ai cherché l'adresse avec un outil tiers et il a trouvé le nom d'hôte. Je suppose que c'était peut-être l'analyse de données WHOIS dans les coulisses ou quelque chose comme ça. Je ne peux pas fermer cela comme invalide, donc je suppose qu'il doit rester ouvert. –

Répondre

3

Etes-vous sûr que l'adresse IPv6 est associée à un DNS inverse? rapports non:

$ 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 

modifier: enfin trouvé une adresse ipv6 qui a inverse DNS associé. En bref, works4me.

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

Et de creuser:

$ 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

Devinez quoi: cette adresse n'a pas DNS inverse. Pour une sortie de creuser plus facile à comprendre:

$ 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) 

Voici un exemple d'une adresse qui ne le DNS inverse:

$ 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. 

Et hey presto, il fonctionne avec votre exemple Python:

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