您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python获取linux和windows系统指定接口的IP地址的步骤及代码

51自学网 2021-10-30 22:41:24
  python
这篇教程python获取linux和windows系统指定接口的IP地址的步骤及代码写得很实用,希望能帮到您。

实验目的:

用户输入网卡名称,通过函数返回对应的IPv4和IPv6地址。

实验代码:

步骤一: 由于window系统下网卡名称并不是真正的名字,而真正的ID在注册表SYSTEM/CurrentControlSet/Control/Network{4d36e972-e325-11ce-bfc1-08002be10318}目录下。所以需要通过如下代码,返回接口名称和唯一ID的对应关系。

在这里插入图片描述

win_ifname.py:

import netifaces as ni# import winreg as wr# 将windows下的接口的名称和唯一ID一一对应存入字典并返回def get_connection_name_from_guid(iface_guids):      wr = __import__('winreg', globals(), locals(), ['wr'])    iface_dict = {}    reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)    reg_key = wr.OpenKey(reg, r'SYSTEM/CurrentControlSet/Control/Network/{4d36e972-e325-11ce-bfc1-08002be10318}')    for i in iface_guids:        try:            reg_subkey = wr.OpenKey(reg_key, i + r'/Connection')            iface_dict[wr.QueryValueEx(reg_subkey, 'Name')[0]] = i        except FileNotFoundError:            pass    return iface_dict # 根据输入的接口名称,返回唯一IDdef win_from_name_get_id(ifname):     x = ni.interfaces()    return get_connection_name_from_guid(x).get(ifname)if __name__ == '__main__':    import platform    if platform.system() == "Windows":        print(win_from_name_get_id("WLAN"))

运行结果:

在这里插入图片描述

可以看到获取WLAN接口的ID和注册表中查看的一致。

步骤二: 通过接口名称(linux)或者接口ID(windows)找到IPv4和IPv6地址。

from netifaces import ifaddresses, AF_INET, AF_INET6import platform# 获取接口IPv4地址def get_ip_address(ifname):    if platform.system() == "Linux":        try:        	# AF_INET表示的是IPv4地址(AF_LINK则表示的是MAC地址)            return ifaddresses(ifname)[AF_INET][0]['addr']        except ValueError:            return None    elif platform.system() == "Windows":    	# 需要首先调用win_from_name_get_id函数,获取接口的ID        from win_ifname import win_from_name_get_id        if_id = win_from_name_get_id(ifname)        if not if_id:            return        else:            return ifaddresses(if_id)[AF_INET][0]['addr']    else:        print('操作系统不支持,本脚本只能工作在Windows或者Linux环境!')# 获取接口IPv6地址,和IPv4同理def get_ipv6_address(ifname):    if platform.system() == "Linux":        try:            return ifaddresses(ifname)[AF_INET6][0]['addr']        except ValueError:            return None    elif platform.system() == "Windows":        from win_ifname import win_from_name_get_id        if_id = win_from_name_get_id(ifname)        if not if_id:            return        else:            # 此处依然要提供WIN的网卡ID, 而不是名字            return ifaddresses(if_id)[AF_INET6][0]['addr']    else:        print('操作系统不支持,本脚本只能工作在Windows或者Linux环境!')if __name__ == "__main__":    if platform.system() == "Linux":        print(get_ip_address('ens33'))        print(get_ipv6_address('ens33'))    elif platform.system() == "Windows":        print(get_ip_address('WLAN'))        print(get_ipv6_address('WLAN'))

测试结果:
windows平台下:

在这里插入图片描述

Linux平台下:

在这里插入图片描述

到此这篇关于python获取linux和windows系统指定接口的IP地址的文章就介绍到这了,更多相关python获取接口ip地址内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python排序算法的简单实现方法
PyTorch 如何将CIFAR100数据按类标归类保存
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。