代码之家  ›  专栏  ›  技术社区  ›  Tony Meyer

IPv6的替代方案是什么套接字.getfqdn在Python中?

  •  1
  • Tony Meyer  · 技术社区  · 14 年前

    socket.getfqdn() 可以很好地处理IPv4地址,例如:

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   habnabit dwc    14 年前

    你确定ipv6地址有与之相关联的反向DNS吗? dig 报告它没有:

    $ 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地址。简言之,我工作。

    >>> 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
    
        2
  •  1
  •   Jeremy Visser    14 年前

    你猜怎么着:那个地址没有反向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.
    

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