我想知道系统的当前IP地址。到目前为止,我无法为我的设备找到任何解决方案。我已经尝试过socket.gethostbyname(socket.gethostname())
的方法,但是它正在回报我127.0.0.1
。
是否有任何Python软件包可以在Ubuntu和Linux上正常运行?
答案 0 :(得分:1)
请记住,您的系统可以在许多接口上具有多个 IP地址(尤其是在使用容器或虚拟机时,尤其如此),因此您需要明确说明< em>您想要的哪个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'
这可能就是您要寻找的值。
答案 1 :(得分:0)
您可以通过Python进行bash调用:
import os
os.system('ipconfig')
或带有子过程
cmd = 'ipconfig'
results = subprocess.run(
cmd, shell=True, universal_newlines=True, check=True)
print(results.stdout)