python - 设置oracle virtualbox时,如何在python中获取本地ip地址

标签 python ip

--

我搜索了如何使用 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/

相关文章:

c++ - 禁止MAC地址访问某个端口 - C++

python - sklearn中VotingClassifier的继承

python - 什么会变成 __builtin__ ?

python - 在 Python 中读取和覆盖文件

python - tkinter python 的全局变量问题

linux - IP KVM/无需窗口管理器即可远程访问 linux x11 session

python - pygettext 提取后 .pot 文件中没有字符集指示

python - "localhost"与 "127.0.0.1"性能

http - 为什么我们在使用HTTP协议(protocol)时需要指定端口号?

c# - 将 IP 地址转换为有效的 URI