--
我搜索了如何使用 python 获取本地 IP 地址。 (我的python版本是3.4)并且有一个答案。该答案说:
import socket
socket.gethostbyname(socket.gethostname())
而且它有效。脚本说我的 IP 地址是 192.168.56.1 。但我的本地(=内部)IP地址是 192.168.0.100 。
那么,那个 IP 地址是什么?这是“Virtualbox Host-Only Network”的 IP 地址,是我一周前设置 virtualbox 时安装的。 (Virtualbox的版本是5.0)我现在有2个网络适配器,一个是'Virtualbox Host-Only Network',另一个是局域网
当我在网络面板中关闭“Virtualbox Host-Only Network”时。 python脚本说我的IP地址是192.168.0.100,这是我想要的。
无论禁用“Virtualbox Host-Only Network”,如何获取我的 IP 地址“192.168.0.100”? (我真的不想关闭“Virtualbox Host-Only Network”。)
最佳答案
您可以使用名为 netifaces 的模块 获取您计算机上可用的任何网络接口(interface)的 IP 地址。
您可以使用 pip 安装 netifaces如果您的系统上安装了 pip。
pip install netifaces
Linux 系统上的命令行示例:
我的机器在 eth0
上有一个常规网络接口(interface),在 eth0:0
上有一个别名网络接口(interface)(这与您的 virtualbox 仅主机网络接口(interface)类似,但是名称会有所不同。)
通过 python 解释器获取计算机上可用的网络接口(interface)列表:
(stackoverflow)[<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3c4e5353487c565359455349525b125553" rel="noreferrer noopener nofollow">[email protected]</a> stackoverflow]# python
>>> import netifaces
>>> netifaces.interfaces()
['lo', 'eth0', 'eth0:0']
获取有关我的常规网络接口(interface) eth0
的更多信息:
>>> netifaces.ifaddresses('eth0')
{17: [{'broadcast': 'ff:ff:ff:ff:ff:ff', 'addr': '52:54:00:0d:4d:36'}], 2: [{'broadcast': '159.107.29.255', 'netmask': '255.255.254.0', 'addr': '159.107.28.65'}]}
我只对 Internet 协议(protocol)地址系列感兴趣,因此让我们使用 AF_INET
作为过滤器来缩小结果范围:
>>> netifaces.ifaddresses('eth0')[netifaces.AF_INET]
[{'broadcast': '159.107.29.255', 'netmask': '255.255.254.0', 'addr': '159.107.28.65'}]
这给我返回了一个包含 1 个条目的列表。该条目包含一本字典。我想要获取由 addr
键表示的值,以便获取我的 eth0
接口(interface)的 IP 地址:
>>> netifaces.ifaddresses('eth0')[netifaces.AF_INET][0]['addr']
'159.107.28.65'
159.107.28.65
是我的 eth0 接口(interface)的本地 IP 地址。
我们也可以执行上述相同的步骤来获取 eth0:0
上的别名 IP 地址:
>>> netifaces.ifaddresses('eth0:0')
{2: [{'broadcast': '192.168.13.255', 'netmask': '255.255.255.0', 'addr': '192.168.13.2'}]}
>>> netifaces.ifaddresses('eth0:0')[netifaces.AF_INET]
[{'broadcast': '192.168.13.255', 'netmask': '255.255.255.0', 'addr': '192.168.13.2'}]
>>> netifaces.ifaddresses('eth0:0')[netifaces.AF_INET][0]['addr']
'192.168.13.2'
关于python - 设置oracle virtualbox时,如何在python中获取本地ip地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32069628/