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


猜你喜欢
- 滚动图片可以说是做网站经常会遇到的,特别是做企业网站,最常用的像产品展示,图片展示等,滚动的好处是吸引眼球,让人一下就注意到。之前本站发了一
- 一、安装openpyxl模块Python操作excel主要用到了openpyxl模块,按win+R打开cmd,在里面输入pip3 insta
- 任务1、循环输出26个字母对应的ASCII码值x=97#代表的是a的ASCII值for _ in range(1,27): &n
- 前言Multiprocessing.Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一
- 1 Tenacity描述今天 给大家介绍一个Python 重试库,Tenacity 这个库 是我 这些年 使用的一个非常好的库,几乎满足了我
- php面试题的题目: $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php
- 本文实例讲述了Python学习笔记之读取文件、OS模块、异常处理、with as语法。分享给大家供大家参考,具体如下:文件读取#读取文件f
- 小毅的blog:http://andymao.com/前天网上有个朋友发给我一个页面让我帮她看一下为什么鼠标翻转实现不了。我打开源文件看了一
- 安装 NumPy如果你已经在系统上安装了 Python 和 PIP,那么安装 NumPy 非常容易。请使用这条命令安装它:C:\Users\
- axios 简介axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:从浏览器中创建
- 第一种方法: 代码如下:Minimsdn.com为您提供的代码: -- Turn ON [Display IO Info when exec
- <P><html><head><meta http-equiv="Content-Typ
- 本文实例讲述了python判断字符串是否纯数字的方法。分享给大家供大家参考。具体如下:判断的代码如下,通过异常判断不能区分前面带正负号的区别
- python 网络编程详解网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、
- 1. 腐蚀 & 膨胀1.1什么是腐蚀&膨胀腐蚀&膨胀是图像形态学中的两种核心操作腐蚀可以描述为是让图像沿着自己的边界
- 本文为大家分享了python实现图书馆研习室自动预约的具体代码,供大家参考,具体内容如下简介现在好多学校为学生提供了非常良好的学习环境,通常
- 当需要定时修改数据库时,一般我们都选择起一个定时进程去改库。如果将这种定时任务写入业务中,写成一个接口呢,定时进程显得有些不太合适?如果需要
- 指定捕获过滤器捕获过滤器的语法格式为:<Protocol> <Direction> <Host> <
- 默认情况下,PyCharm中如果有无法错误或者不符合PEP8规范代码下面会有波浪线,语法错误波浪线为红色(如下图的第10行),不符合PEP8
- 前言目前机器学习框架有两大方向,Pytorch和Tensorflow 2。对于机器学习的小白的我来说,直观的感受是Tensorflow的框架