【问题标题】:Python lookup hostname from IP with 1 second timeoutPython 从 IP 查找主机名,超时 1 秒
【发布时间】:2011-02-04 06:26:24
【问题描述】:

如何在给定 IP 地址的情况下查找主机名?此外,如果不存在这样的反向 DNS 条目,我如何指定超时?试图让事情尽可能快。或者,还有更好的方法?谢谢!

【问题讨论】:

    标签: python dns hostname nameservers


    【解决方案1】:
    >>> import socket
    >>> socket.gethostbyaddr("69.59.196.211")
    ('stackoverflow.com', ['211.196.59.69.in-addr.arpa'], ['69.59.196.211'])
    

    为了实现函数的超时,this stackoverflow thread 对此有答案。

    【讨论】:

    • 像 'http:/1.0.1.0/blah/blahm.html' 这样的东西呢?
    • @Eiyrioü von Kauyf:这不是问题所在(指定 IP 地址时返回主机名)。
    • 这是同一个问题 - 但是我问你有没有建议的方法来规范化它并执行 socket.gethostbyaddr("1.0.1.0") 之类的?这是同一个问题,但输入格式不同 - gethostbyaddr 不喜欢非规范化输入。
    • @EiyrioüvonKauyf 是的,因为它正是该方法应该做的:ip 到 dns 的转换......你可以使用像 http(|s)://([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/.* 这样的正则表达式。还有更多,更好或更精确的
    • socket 有自己的方法来设置超时时间:docs.python.org/2/library/socket.html#socket.socket.settimeout
    【解决方案2】:

    您尝试完成的操作称为反向 DNS 查找。

    socket.gethostbyaddr("IP") 
    # => (hostname, alias-list, IP)
    

    http://docs.python.org/library/socket.html?highlight=gethostbyaddr#socket.gethostbyaddr

    但是,对于超时部分,我读到有人遇到过这个问题。我会查看PyDNSthis 解决方案以获得更高级的治疗。

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2014-08-15
      • 2011-11-18
      相关资源
      最近更新 更多