gpt4 book ai didi

python - 当我有多个 NIC 时,如何确定我的所有 IP 地址?

转载 作者:IT老高 更新时间:2023-10-28 21:48:47 26 4
gpt4 key购买 nike

我的计算机上有多个网络接口(interface)卡,每个都有自己的 IP 地址。

当我使用 Python(内置)socket 模块中的 gethostbyname(gethostname()) 时,它只会返回其中一个。我如何获得其他人?

最佳答案

使用 netifaces模块。因为网络很复杂,所以使用 netifaces 可能有点棘手,但您可以按照以下方式进行操作:

>>> import netifaces
>>> netifaces.interfaces()
['lo', 'eth0']
>>> netifaces.ifaddresses('eth0')
{17: [{'broadcast': 'ff:ff:ff:ff:ff:ff', 'addr': '00:11:2f:32:63:45'}], 2: [{'broadcast': '10.0.0.255', 'netmask': '255.255.255.0', 'addr': '10.0.0.2'}], 10: [{'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::211:2fff:fe32:6345%eth0'}]}
>>> for interface in netifaces.interfaces():
... print netifaces.ifaddresses(interface)[netifaces.AF_INET]
...
[{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}]
[{'broadcast': '10.0.0.255', 'netmask': '255.255.255.0', 'addr': '10.0.0.2'}]
>>> for interface in netifaces.interfaces():
... for link in netifaces.ifaddresses(interface)[netifaces.AF_INET]:
... print link['addr']
...
127.0.0.1
10.0.0.2

可以像这样使它更具可读性:

from netifaces import interfaces, ifaddresses, AF_INET

def ip4_addresses():
ip_list = []
for interface in interfaces():
for link in ifaddresses(interface)[AF_INET]:
ip_list.append(link['addr'])
return ip_list

如果您需要 IPv6 地址,请使用 AF_INET6 而不是 AF_INET。如果你想知道为什么 netifaces 到处都使用列表和字典,那是因为一台计算机可以有多个 NIC,每个 NIC 可以有多个地址,每个地址都有自己的一组选项.

关于python - 当我有多个 NIC 时,如何确定我的所有 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com