python获取linux和windows系统指定接口的IP地址的步骤及代码
作者:格洛米爱学习 发布时间:2023-04-22 08:22:21
标签:python,接口,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
# 根据输入的接口名称,返回唯一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
0
投稿
猜你喜欢
- 这里以安装简单的nonebot库为例子欧克,简明扼要,拿走点赞哟:大家想要的豆瓣源如下:因为有几个,但在这里还是建议使用国内的豆瓣源,本人感
- 本文实例讲述了PHP登录验证功能。分享给大家供大家参考,具体如下:登录界面具体实现方法如下:login.html<!DOCTYPE h
- 摘 要: 恢复丢失的数据库文件在很大程度上取决于所采用的备份策略。本文从恢复的灵活性出发,对Oracle8数据库的备份及恢复策略进行了探讨,
- 本文实例讲述了php购物车实现方法。分享给大家供大家参考。具体分析如下:这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了
- 1.sort.Sort介绍使用sort.Slice进行排序,因为slice把struct抽象化了,且slice封装过了,简单的基础类型可以使
- 前言许多任务程序如果为其构造为一个命令行界面,就可以通过接受不同的参数来改变它的工作方式。例如,在爬虫程序中,不同 URL&nbs
- 关于target="_blank"去留的问题在网上已经被反复争议很多次了。有的说要留,有的说要去掉。主张留的一方主要是考
- python语句与语法1.python简单语句的基本介绍>>> while True: #简单的while循环... re
- 绘制直线图,确定x范围和y的范围代码:import matplotlib.pyplot as pltimport numpy as npxp
- javascript 代码实现vbscript中的trim、left、right等函数兼容IE,FireFox。<style>b
- 看了不少朋友的个人网站,有一个小问题,似乎很多朋友都忽略了,那就是版权声明的写法。虽然那只是一小行字,不过作为设计师也好,作为个人的爱好也好
- 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL
- 概要本文分步介绍了如何在运行 SQL Server 的计算机之间移动 Microsoft SQL Server 用户数据库和大多数常见的 S
- 需求:用SQL语句随机从数据库中随机取N条数据。以前不太清楚SQL语句可以直接随机取数据今天查了一下,发现有两个随机函数: newid()
- 0. 学习目标栈和队列是在程序设计中常见的数据类型,从数据结构的角度来讲,栈和队列也是线性表,是操作受限的线性表,它们的基本操作是线性表操作
- 在默认情况下,Access 2000/2002数据库是以“共享”的方式打开的,这样可以保证多人能够同时使用同一个数据库。不过,在共享方式打开
- VBSCRIPT中的日期,时间,星期函数很丰富,给我们使用带来了很大的方便,我个人使用最多的就是用now()来获取服务器的当前日期和时间。但
- 搭建lnmp完lnmp环境后,测试时出现502报错,看到这个问题,我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep
- Python 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了
- 在使用Python的过程中,一定是离不开数据结构的, 也就是List-列表,Tuples-元组,Dictionaries-字典。那实际应用中