python获取linux和windows系统指定接口的IP地址的步骤及代码
作者:格洛米爱学习 时间:2023-04-22 08:22:21
实验目的:
用户输入网卡名称,通过函数返回对应的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
# 根据输入的接口名称,返回唯一ID
def 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_INET6
import 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平台下:
来源:https://blog.csdn.net/tushanpeipei/article/details/116572723
标签:python,接口,ip地址
0
投稿
猜你喜欢
浅论网站用户粘性的提高和增强
2008-05-15 07:14:00
django filter过滤器实现显示某个类型指定字段不同值方式
2023-06-21 07:48:26
ASp使用AspJpeg组件制作透明文字水印
2008-01-15 20:25:00
bootstrap-table组合表头的实现方法
2024-05-11 09:07:53
Go应该如何实现二级缓存
2024-02-19 17:07:53
Python3中关于cookie的创建与保存
2023-11-29 00:29:22
sql 查询慢的原因分析
2024-01-16 13:11:29
SQL Server中ISNULL函数介绍
2009-09-09 21:23:00
Python实现判断一个整数是否为回文数算法示例
2022-05-13 12:01:07
关于golang监听rabbitmq消息队列任务断线自动重连接的问题
2024-04-25 13:21:03
mysql中的general_log(查询日志)开启和关闭
2024-01-19 01:49:10
Mysql 文件配置解析
2024-01-26 10:01:54
Python基础教程(一)——Windows搭建开发Python开发环境
2021-06-16 13:41:53
python编程实现清理微信重复缓存文件
2022-06-20 02:12:12
javascript实现右下角广告框效果
2024-04-17 10:25:08
python 七种邮件内容发送方法实例
2022-01-13 21:06:38
python如何查看系统网络流量的信息
2022-11-03 13:54:08
mysql出现10061错误解决办法
2010-07-04 13:36:00
Python实现将绝对URL替换成相对URL的方法
2023-08-28 13:40:08
Python 内置变量和函数的查看及说明介绍
2021-06-11 16:12:14