慕桂英3389331
请记住,您的系统可以具有多个IP地址,很多接口(这个,如果你正在使用的容器或虚拟机工作时尤其如此),所以你需要明确了解其想要的IP地址。此外,如果您的设备通过某种类型的 NAT 运行,则可能有一个与您的设备关联的外部地址,该地址在您的任何接口上都不可见。因此,如果您的问题没有得到澄清,就很难确切地知道您在寻找什么。出于此答案的目的,我假设您想要“与默认路由关联的接口上的第一个 IP 地址”。我们可以使用netifaces模块来帮助解决这个问题:首先,我们需要默认接口的名称。我们可以使用该netifaces.gateways()方法来获取网关列表:>>> import netifaces>>> netifaces.gateways(){'default': {2: (u'192.168.1.1', u'eth0')}, 2: [(u'192.168.1.1', u'eth0', True)]}该default键表示我们的默认网关,并且键的值是一个字典,其中键是地址的家庭,所以要得到我们所需要的接口名称:>>> netifaces.gateways()['default'][netifaces.AF_INET][1]u'eth0'获得默认接口的名称后,我们可以使用以下netifaces.interfaces()方法查找它:>>> iface = netifaces.gateways()['default'][netifaces.AF_INET][1]>>> netifaces.ifaddresses(iface){17: [{'broadcast': u'ff:ff:ff:ff:ff:ff', 'addr': u'64:00:6a:7d:06:1a'}], 2: [{'broadcast': u'192.168.1.255', 'netmask': u'255.255.255.0', 'addr': u'192.168.1.24'}, {'broadcast': u'192.168.1.100', 'netmask': u'255.255.255.0', 'addr': u'192.168.1.100'}, {'broadcast': u'192.168.1.101', 'netmask': u'255.255.255.0', 'addr': u'192.168.1.101'}], 10: [{'netmask': u'ffff:ffff:ffff:ffff::/64', 'addr': u'fe80::5da1:2401:a725:d2e0%eth0'}]}这为我们提供了一堆接口信息,再次以地址族为键。获取接口的第一个IP地址:>>> netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr']u'192.168.1.24'这可能就是您正在寻找的价值。