如何使用 Python 查找当前连接(LAN 或 WiFi)的 IP 地址?

我想知道我系统的当前 IP 地址。到目前为止,我无法为我的设备找到任何解决方案。我尝试过socket.gethostbyname(socket.gethostname())方法,但它让我回归127.0.0.1

是否有任何 Python 包可以在 Ubuntu 和 Linux 中运行良好?


撒科打诨
浏览 760回答 2
2回答

慕桂英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'这可能就是您正在寻找的价值。

慕田峪4524236

您可以从 Python 进行 bash 调用:import osos.system('ipconfig')或与子进程cmd = 'ipconfig'results = subprocess.run(           cmd, shell=True, universal_newlines=True, check=True)print(results.stdout)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python