Python套接字GethostByName()仅返回一个IP地址



我正在使用python套接字进行一些简单的实验,其中我有一个使用两个IP地址解决的主机名,但是当我使用时,



socket.gethostbyname('demo.sample.com')










BR>我只收到一个IP地址。为什么会以这种方式显示?还有其他方法可以获得多个IP地址吗?

编辑-1

我得到了它,而不是gethostbyname('demo.sample.com')
我尝试了gethostbyname_ex('demo.sample.com')
它给出了结果。

从文档中可以看到:

  • GethostByName仅返回一个IPv4地址。并引用:
    有关更完整的接口,请参见Gethostbyname_ex((。
  • gethostbyname_ex将返回多个IPv4地址,但请查看使用情况。并引用:
    gethostbyname_ex((不支持IPv6名称分辨率,而GetAddrinfo((应用于IPv4/V6双堆栈支持。
  • getAddrinfo将返回所有IPv4和IPv6地址,但请查看用法。

我在这里找到了一个解决方案,该解决方案返回内部网络IP:

import socket

def ip_addr(hostIP=None):
    if hostIP is None or hostIP == 'auto':
        hostIP = 'ip'
    if hostIP == 'dns':
        hostIP = socket.getfqdn()
    elif hostIP == 'ip':
        from socket import gaierror
        try:
            hostIP = socket.gethostbyname(socket.getfqdn())
        except gaierror:
            logger.warn('gethostbyname(socket.getfqdn()) failed... trying on hostname()')
            hostIP = socket.gethostbyname(socket.gethostname())
        if hostIP.startswith("127."):
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            # doesn't have to be reachable
            s.connect(('10.255.255.255', 1))
            hostIP = s.getsockname()[0]
    return hostIP

if __name__ == '__main__':
    print('%s' % ip_addr())

最新更新