2014-10-28 61 views
0

我正在尝试编写一些代码,可以获取与给定主机名关联的所有IP地址。获取与主机关联的所有IP地址

这是我到目前为止有:

def getips(hostname): 
    try: 
     result = socket.getaddrinfo(hostname, None, socket.AF_INET,\ 
      socket.SOCK_DGRAM, socket.IPPROTO_IP, socket.AI_CANONNAME) 
     list = [x[4][0] for x in result] 
     return list 
    except Exception, err: 
     print "error" 
    return "" 


ips = getips('bbc.co.uk')             

print ips 

的问题是,有时它会返回在这个例子中,特定的主机相关联的所有4级的IPS,有时它返回只有一个。有什么办法可以在Python中做到这一点,所以它始终返回与主机相关的所有IP?

+0

对于我来说,它始终得到四个结果没有失败。 – 2014-10-28 14:10:56

+0

我刚刚在另一台主机上尝试过它,它也适用于我。它不起作用的是在Win8主机上运行的Ubuntu VM。 – smithy 2014-10-28 14:26:23

回答

1

getaddrinfo()调用主机上的解析器库来查找任何给定主机的IP地址。 python中没有什么特别的魔力可以强制它得到不同于解析器显示的结果集。

对于e.g如果你对你的Python脚本运行strace的,你会发现,解析器被调用:

open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3 
+0

谢谢,这是有用的信息。 – smithy 2014-10-28 14:51:16

相关问题