我正在使用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())