当前位置: 首页 > 面试题库 >

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

颜镜
2023-03-14
问题内容

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

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


问题答案:

使用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可以有多个地址,并且每个地址都有自己的一组选项。



 类似资料:
  • 问题内容: 我有一种Http-Gateway应用程序,它充当本地网络外部服务器的http客户端。 将会进行网络配置升级,并且我会遇到问题,因为: -客户端计算机上有多个网卡 -防火墙/ NAT规则使用硬连线的IP地址 如果我可以以编程方式强制HttpUrlConnection对象使用特定的IP地址,那么我会好的。但恐怕无法完成。 我对吗?如果没有,哪个版本的JRE支持它? 其他可能的解决方案,最好

  • 问题内容: 缺少解析输出,没有人有100%的纯Java方法吗? 问题答案: 这很简单:

  • 我有一个Grails应用程序,我正在连接到一个MongoDB实例。在我的数据源中。groovy,我声明如下: Mongo已经安装好,并且可以正常启动。 问题是当我连接到网络时,使用grails run-app会记录以下异常: 包装Grails应用程序…|运行Grails应用程序 配置Spring Security核心。。。已完成配置Spring Security Core 配置Spring Sec

  • 问题内容: 在Python中,确定IP地址(例如或)是否在专用网络上的最佳方法是什么?该代码听起来并不难编写。但是边缘情况可能比立即出现的情况还多,并且需要考虑对IPv6的支持,等等。是否有现有的库可以做到这一点? 问题答案: 签出IPy模块。如果具有的功能似乎可以满足您的要求:

  • 问题内容: 我有以下查询: 我想要的只是获得不同的汽车名称。 我写了这个,但这不是我想要的。 我怎么解决这个问题? 问题答案: 尝试

  • 但是,这给了我127.0.1.1的IP地址。当我使用时,我得到以下信息 首先,我不知道127.0.1.1是从哪里来的,但不管怎样,这都不是我想要的。当我谷歌的时候,我总是看到相同的语法,Bash脚本或netifaces,我试图使用标准库。 那么如何在Python中获取eth0的IP地址呢?