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]] = iexcept FileNotFoundError:passreturn 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 platformif 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 Noneelif platform.system() == "Windows":# 需要首先调用win_from_name_get_id函数,获取接口的IDfrom win_ifname import win_from_name_get_idif_id = win_from_name_get_id(ifname)if not if_id:returnelse: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 Noneelif platform.system() == "Windows":from win_ifname import win_from_name_get_idif_id = win_from_name_get_id(ifname)if not if_id:returnelse:# 此处依然要提供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获取linux和windows系统指定接口的IP地址的文章就介绍到这了,更多相关python获取接口ip地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Linux下面如何查看tomcat已经使用多少线程
- Beego打包部署到Linux
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则