当前位置: 首页 > news >正文

基于python开发的IP修改工具

工作中调试设备需要经常修改电脑IP,非常麻烦,这里使用Python+tkinter做了一个IP修改工具
在这里插入图片描述

说明:

  • 1.启动程序读取config.json文件
  • 2.如果没有该文件则创建,写入当前网卡信息
  • 3.通过配置信息进行网卡状态修改
  • 4.更新文件状态,删除或修改当前config.json即可

打包指令

pyinstaller -F -w --uac-admin -i .\img\network_web_icon.ico -n IPTool .\setip_ui.py

项目 Github地址

项目代码

# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import subprocess
import re
import os
import jsonclass NetAdapter:def __init__(self, lines):self.EnableDHCP = '是' in lines[0]self.IPAddr = lines[1].split(':')[1].strip()input_string = lines[2]pattern = r'掩码 (\d+\.\d+\.\d+\.\d+)'match = re.search(pattern, input_string)self.Mask = match.group(1)# 接口 "net1" 的配置# DHCP 已启用:                          是# IP 地址:                           192.168.1.3# 子网前缀:                        192.168.1.0/24 (掩码 255.255.255.0)# 默认网关:                         192.168.1.1# 网关跃点数:                       0# InterfaceMetric:                      35def EnableDHCPStr(self):return '动态IP' if self.EnableDHCP else '静态IP'class SetIPUI:def __init__(self, root):root.title("网卡设置工具")self.setmid(root)tk.Label(root, text="网卡类型").grid(row=0, padx='2px', pady='3px')self.configDic = self.initConfig()self.cmb = ttk.Combobox(root)self.cmb.grid(row=0, column=1, columnspan=1, padx='2px', pady='3px')self.cmb['values'] = list(self.configDic.keys())self.cmb.bind("<<ComboboxSelected>>", self.getAdapterInfo)rowIndex = 1self.entry_vars = []for title in ['类型', 'ip', '子网掩码']:tk.Label(root, text=title).grid(row=rowIndex, column=0, padx='2px', pady='3px')entry_var = tk.StringVar()entry = tk.Entry(root, textvariable=entry_var)entry.grid(row=rowIndex, column=1, padx='2px', pady='3px')self.entry_vars.append(entry_var)rowIndex += 1tk.Button(root, text="动态ip", width=10, command=self.setDynamicIp).grid(row=rowIndex, column=0, columnspan=1,sticky="w", padx=10, pady=5)tk.Button(root, text="静态ip", width=10, command=self.setStaticIp).grid(row=rowIndex, column=1, columnspan=1,sticky="e", padx=10, pady=5)text=tk.Text(root,height=20,width=40)text.grid(row=0,column=2,rowspan=rowIndex+1,columnspan=3,sticky="e", padx=10, pady=5)self.setExplain(text)def setExplain(self,text:tk.Text):context="说明:\n" \"1.启动程序读取config.json文件\n" \"2.如果没有该文件则创建,写入当前网卡信息\n" \"3.通过配置信息进行网卡状态修改\n" \"4.更新文件状态,删除或修改当前config.json即可"text.insert('1.0',context)def setmid(self,root):window_width = 580window_height = 280screen_width = root.winfo_screenwidth()screen_height = root.winfo_screenheight()x = (screen_width - window_width) // 2y = (screen_height - window_height) // 2root.geometry(f"{window_width}x{window_height}+{x}+{y}")def initConfig(self) -> dict:fn = 'config.json'if not os.path.exists(fn):self.createConfig()with open(fn, "r",encoding='utf-8') as json_file:data = json.load(json_file)return datadef createConfig(self):names = self.getAllNames()data = {}for name in names:myAda = self.getAdapterInfoImpl(name)if myAda is None:continuedata[name] = {'dhcp': myAda.EnableDHCP, 'ip': myAda.IPAddr, 'mask': myAda.Mask}# 写回JSON文件fn = 'config.json'with open(fn, "w",encoding='utf-8') as json_file:json.dump(data, json_file, indent=4,ensure_ascii=False)def getAllNames(self):command = "netsh interface show interface"output = subprocess.check_output(command, shell=True, text=True)adapters = []lines = output.splitlines()lines = [l for l in lines if "连接" in l]for line in lines:  # 从第四行开始解析parts = line.split('   ')if len(parts) > 1:adapter_name = parts[-1]adapters.append(adapter_name)print(adapter_name)return adaptersdef getAdapterInfo(self, event):key=self.cmb.get()adapter = self.configDic[key]dhcp=self.getAdapterInfoImpl(key).EnableDHCPStr()if adapter is None:messagebox.showerror("错误", f"{self.cmb.get()}未连接或未启用")returnself.entry_vars[0].set(dhcp)self.entry_vars[1].set(adapter['ip'])self.entry_vars[2].set(adapter['mask'])def getAdapterInfoImpl(self, adapter):command = f"netsh interface ip show address \"{adapter}\""output = subprocess.check_output(command, shell=True, text=True)# 解析输出以获取 IP 地址状态lines = output.splitlines()if (len(lines) <= 5):returnmyAda = NetAdapter(lines[2:])return myAdadef setDynamicIp(self):adapter = self.cmb.get()  # 网卡名称# 使用netsh设置为动态IP地址(DHCP)try:ipCmd = f"netsh interface ipv4 set address name=\"{adapter}\" source=dhcp"subprocess.run(ipCmd, shell=True, check=True, encoding='utf-8')subprocess.run(f"netsh interface ipv4 set dns name=\"{adapter}\" source=dhcp", shell=True, check=True,encoding='utf-8')messagebox.showinfo("完成", "已设置为动态IP地址(DHCP)")except subprocess.CalledProcessError as err:messagebox.showerror("错误", err.output)def setStaticIp(self):interface_name = self.cmb.get()  # 网卡名称# 请根据你的网络配置进行适当的替换ip_address = self.entry_vars[1].get()subnet_mask = self.entry_vars[2].get()try:command = f"netsh interface ipv4 set address name=\"{interface_name}\" static {ip_address} {subnet_mask}"# 使用netsh设置静态IP地址subprocess.run(command, shell=True, check=True)messagebox.showinfo("完成", "已设置为静态IP地址")except subprocess.CalledProcessError as err:messagebox.showerror("错误", err.output)if __name__ == '__main__':# pyinstaller -F -w --uac-admin -i .\img\network_web_icon.ico -n IPTool .\setip_ui.pyroot = tk.Tk()myUI = SetIPUI(root)root.mainloop()

相关文章:

基于python开发的IP修改工具

工作中调试设备需要经常修改电脑IP&#xff0c;非常麻烦&#xff0c;这里使用Pythontkinter做了一个IP修改工具 说明: 1.启动程序读取config.json文件2.如果没有该文件则创建&#xff0c;写入当前网卡信息3.通过配置信息进行网卡状态修改4.更新文件状态&#xff0c;删除或修…...

Mybatis源码分析

1. Mybatis整体三层设计 SSM中&#xff0c;Spring、SpringMVC已经在前面文章源码分析总结过了&#xff0c;Mybatis源码相对Spring和SpringMVC而言是的简单的&#xff0c;只有一个项目&#xff0c;项目下分了很多包。从宏观上了解Mybatis的整体框架分为三层&#xff0c;分别是基…...

python树结构包treelib入门及其计算应用

树是计算机科学中重要的数据结构。例如决策树等机器学习算法设计、文件系统索引等。创建treelib包是为了在Python中提供树数据结构的有效实现。 Treelib的主要特点包括&#xff1a; 节点搜索的高效操作。支持常见的树操作&#xff0c;如遍历、插入、删除、节点移动、浅/深复制…...

Rust之自动化测试(三): 测试组合

开发环境 Windows 10Rust 1.73.0 VS Code 1.83.1 项目工程 这里继续沿用上次工程rust-demo 测试组合 正如本章开始时提到的&#xff0c;测试是一个复杂的学科&#xff0c;不同的人使用不同的术语和组织。Rust社区根据两个主要类别来考虑测试:单元测试和集成测试。单元测试很…...

专业管理菜单的增删改、查重

1&#xff0c;点击专业管理菜单------查询所有专业信息列表 ①点击菜单&#xff0c;切换专业组件 ②切换到列表组件后&#xff0c;向后端发送请求到Servlet ③调用DAO层&#xff0c;查询数据库&#xff08;sql&#xff09;&#xff0c;封装查询到的内容 ④从后端向前端做出…...

vue3插件开发,上传npm

创建插件 在vue3工程下&#xff0c;创建组件vue页: toolset.vue。并设置组件名称。注册全局组件。新建index.js文件。内容如下&#xff0c;可在main.js中引入index.js&#xff0c;注册该组件进行测试。![在这里插入图片描述](https://img-blog.csdnimg.cn/a3409d2cbeec41c797d5…...

python【多线程、单线程、异步编程】三个版本--在爬虫中的应用

并发编程在爬虫中的应用 之前的课程&#xff0c;我们已经为大家介绍了 Python 中的多线程、多进程和异步编程&#xff0c;通过这三种手段&#xff0c;我们可以实现并发或并行编程&#xff0c;这一方面可以加速代码的执行&#xff0c;另一方面也可以带来更好的用户体验。爬虫程…...

大模型LLM相关面试题整理-位置编码-tokenizer-激活函数-layernorm

10 LLMs 位置编码篇 10.1.1 什么是位置编码&#xff1f; 位置编码是一种用于在序列数据中为每个位置添加位置信息的技术。在自然语言处理中&#xff0c;位置编码通常用于处理文本序列。由于传统的神经网络无法直接捕捉输入序列中的位置信息&#xff0c;位置编码的引入可以帮助…...

python在nacos注册微服务

安装 首先需要安装python的nacos sdk pip install nacos-sdk-python 注册 注册过程非常简单&#xff0c;需要注意的是&#xff0c;注册完要定时发送心跳&#xff0c;否则服务会被nacos删掉。 import nacos import timeSERVER_ADDRESSES "http://1.2.3.4:8848" …...

tuxera ntfs2024破解版mac电脑磁盘读写软件

大家都知道由于操作系统的原因&#xff0c;在苹果电脑上不能够读写NTFS磁盘&#xff0c;但是&#xff0c;今天小编带来的这款tuxera ntfs 2024 mac版&#xff0c;完美的解决了这个问题。这是一款在macOS平台上使用的磁盘读写软件&#xff0c;能够实现苹果Mac OS X系统读写Micro…...

【源码】C++坦克大战源码

文章目录 题目介绍你收到的所有文件源码效果展示报告内容 题目介绍 代码量&#xff1a;1450 语言&#xff1a;C 你收到的所有文件 其中一个是devc版本&#xff0c;也可以用visual stdio 运行。 源码效果展示 typedef struct //这里的出现次序指的是一个AI_ta…...

AIO开放接口平台免费畅享ChatGPT聊天、联网互动、学术等服务!更有DALL·E 3最强AI绘图功能!

免费畅享&#xff01; AIO平台ChatGPT联网、聊天、学术等服务&#xff01; AIO开放接口平台 | 服务介绍 ALL IN ONE &#xff08;AIO&#xff09;API服务是LLM(大语言模型)开放接口平台&#xff1a;持续接入各种主流的大模型接口&#xff0c;并提供简单、易用、统一的API交互…...

【python】屈小原现在要为学校写校庆贺文(CTGU百年校庆)

题目&#xff1a; """ 题目描述&#xff1a; 屈小原需要为学校的校庆写一篇贺文&#xff0c;共需写下n个字&#xff0c;但他目前只完成了1个字。屈小原可以进行两种操作&#xff1a; 在文档的末尾添加一个字&#xff0c;这样字数就会变为x1。 写下与当前字数相同…...

探索未来的视觉革命:卷积神经网络的崭新时代(二)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

博客后台模块续更(三)

四、后台模块-动态路由 实现了这个动态路由功能之后&#xff0c;就能在浏览器web页面登录进博客管理后台了 1. 接口分析 后台系统需要能实现不同的用户权限可以看到不同的功能&#xff0c;即左侧的导航栏 请求方式 请求地址 请求头 GET /getRouters 需要token请求头 …...

第十二届蓝桥杯模拟赛第三期

A填空题 问题描述 请问在 1 到 2020 中&#xff0c;有多少个数与 2020 互质&#xff0c;即有多少个数与 2020 的最大公约数为 1。 参考答案 800 public class Main {public static void main(String[] args) {int ans0;for(int i1;i<2020;i) {if(gcd(2020,i)1) {ans;}}…...

2023年浙大MEM考前80天上岸经验分享

时间过得真快&#xff0c;转眼间已经是十月份了。回想起去年这个时候&#xff0c;我还在为考研而感到焦虑不安。然而&#xff0c;如今我已经在浙大MEM项目学习了一个多月的时间了。在这一个月的学习过程中&#xff0c;我不仅学到了许多专业知识&#xff0c;还结识了很多志同道合…...

增加并行度后,发现Flink窗口不会计算的问题。

文章目录 前言一、现象二、结论三、解决 前言 窗口没有关闭计算的问题&#xff0c;一直困扰了很久&#xff0c;经过多次验证&#xff0c;确定了问题的根源。 一、现象 Flink使用了window&#xff0c;同时使用了watermark &#xff0c;并且还设置了较高的并行度。生产是设置了…...

使用 JMeter 和 Docker 进行服务存根

用于性能测试的服务存根&#xff1a;简介 随着测试项目的复杂性不断增加&#xff0c;越来越多的被测系统的测试流程受到依赖系统的影响。当我说“依赖系统”时&#xff0c;我指的是&#xff1a; 不受当前开发影响的遗留系统 属于另一个组织的第三方服务 您的组织开发的系统&am…...

《王道计算机考研——操作系统》学习笔记总目录+思维导图

本篇文章是对《王道计算机考研——操作系统》所有知识点的笔记总结归档和计算机网络的思维导图 学习视频&#xff1a;王道计算机考研 操作系统 408四件套【计网、计组、操作系统、数据结构】完整课堂PPT 思维导图 &#xff08;求Star~&#xff09;&#xff1a;【王道考研】计…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献

Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译&#xff1a; ### 胃肠道癌症的发病率呈上升趋势&#xff0c;且有年轻化倾向&#xff08;Bray等人&#xff0c;2018&#x…...

解密鸿蒙系统的隐私护城河:从权限动态管控到生物数据加密的全链路防护

摘要 本文以健康管理应用为例&#xff0c;展示鸿蒙系统如何通过细粒度权限控制、动态权限授予、数据隔离和加密存储四大核心机制&#xff0c;实现复杂场景下的用户隐私保护。我们将通过完整的权限请求流程和敏感数据处理代码&#xff0c;演示鸿蒙系统如何平衡功能需求与隐私安…...