告别繁琐命令行:一款高效 Windows 端口管理工具的开发与使用
围绕 Windows 系统下端口被占用的痛点,介绍了一款便捷的 GUI 端口管理工具的开发与使用。文章先阐述了传统命令行解决端口占用问题的繁琐性,随后说明选择 Python 作为开发语言的原因,详细列出工具的核心功能(如实时监控、智能搜索、一键终止进程等),简要解析了基于psutil和tkinter的核心技术实现,提及 AI 在开发过程中的辅助作用,最后提供了工具的源码地址和 exe 下载链接,方
在日常的软件开发和学习过程中,“端口被占用” 是我们经常遇到的头疼问题。每次遇到这种情况,我们都需要在命令行中执行一系列操作:先用netstat -ano | findstr <port>找到占用端口的进程,再用taskkill -PID <pid> -F强制关闭进程。这套操作虽然不复杂,但反复执行时却显得十分繁琐,严重影响开发效率和心情。
为了解决这个痛点,我开发了一款 Windows 端口管理工具,通过图形化界面实现端口的可视化管理,让端口查看和释放变得简单高效。


技术选型考量
在开发之初,我面临着技术栈的选择:是使用熟悉的 Java 语言,还是选择更轻量高效的 Python?
经过权衡,我最终选择了 Python,主要基于以下几点考虑:
-
开发效率:Python 语法简洁,开发速度快,对于这类系统工具类应用可以快速迭代
-
生态优势:Python 拥有丰富的系统交互库,尤其是
psutil库能非常方便地获取系统进程和网络连接信息 -
GUI 实现简单:内置的 Tkinter 库可以快速构建图形界面,无需额外安装重量级 GUI 框架
-
部署方便:可以通过 PyInstaller 等工具轻松打包为单个可执行文件,方便用户使用
工具功能特性
这款端口管理工具具备以下核心功能:
-
实时端口监控:动态显示系统所有 TCP/UDP 端口的占用状态
-
智能搜索过滤:根据协议、IP、端口号、状态、PID 和进程名快速定位特定端口
-
常用端口高亮:自动识别并高亮显示常见服务端口(如 Web、数据库、远程连接等)
-
进程信息详情:双击端口项可查看占用该端口的进程完整信息
-
安全端口释放:一键终止占用指定端口的进程(支持批量操作)
-
快捷刷新机制:通过 F5 快捷键或刷新按钮实时更新端口数据
-
进程聚合视图:支持按进程名称或 PID 聚合显示端口信息
-
简洁用户界面:采用现代化设计,操作直观,响应迅速
核心技术实现
工具的核心实现基于 Python 的两个关键库:psutil用于获取系统信息,tkinter用于构建图形界面。
项目结构
├── main.py # 主入口文件
├── theme.py # 主题和样式设置
├── utils.py # 工具函数,如端口数据加载
├── ui_components.py # UI组件,如菜单、工具栏、表格等
├── features.py # 功能实现,如进程详情、进程终止等
├── requirements.txt # 项目依赖
└── README.md # 项目说明
关键代码解析
主程序入口实现了应用的初始化和界面搭建:
class PortViewerApp:
"""Windows端口查看器应用程序"""
def __init__(self, root):
self.root = root
self.root.title("Windows端口查看器")
self.root.geometry("1000x600")
self.root.minsize(800, 450)
# 初始化主题和界面组件
self.theme = Theme()
self.setup_styles()
# 常用端口列表
self.common_ports = {
# 基础网络服务端口
21, 22, 23, 25, 53, 80, 110, 143, 443,
# 数据库服务端口
3306, 5432, 1521, 1433, 27017, 6379,
# Web服务和应用服务器端口
8080, 8081, 8000, 8443, 3000, 5000, 9000,
# 其他常用开发工具和服务端口
5900, 3389, 9200, 9092, 5672, 2181
}
# 创建UI组件
create_menu(self)
create_toolbar(self)
create_search_frame(self)
create_status_bar(self)
create_table(self)
# 加载端口数据
self.refresh_data()
端口数据加载和展示是核心功能之一,通过 psutil 库实现:
def load_ports_data(app):
"""加载端口数据并显示在表格中"""
# 清空表格
for item in app.tree.get_children():
app.tree.delete(item)
# 统计信息初始化
tcp_count = 0
udp_count = 0
processes = set()
try:
# 获取所有网络连接
connections = psutil.net_connections()
for conn in connections:
# 过滤掉状态为None且没有远程地址的连接
if conn.status is None and not conn.raddr:
continue
# 提取连接信息
protocol = "TCP" if conn.type == socket.SOCK_STREAM else "UDP"
local_addr = f"{conn.laddr.ip}:{conn.laddr.port}" if conn.laddr else ""
remote_addr = f"{conn.raddr.ip}:{conn.raddr.port}" if conn.raddr else ""
status = conn.status if conn.status else ""
pid = conn.pid
# 获取进程名称
process_name = "未知进程"
if pid:
try:
process = psutil.Process(pid)
process_name = process.name()
processes.add(pid)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
# 增加协议计数
if protocol == "TCP":
tcp_count += 1
else:
udp_count += 1
# 插入表格
item = app.tree.insert("", "end", values=(
protocol,
local_addr.split(':')[0], # 本地IP
local_addr.split(':')[1] if ':' in local_addr else "", # 本地端口
remote_addr,
status,
pid,
process_name
))
# 高亮常用端口
try:
port_num = int(local_addr.split(':')[1]) if ':' in local_addr else 0
if port_num in app.common_ports:
app.tree.item(item, tags=("highlight",))
except ValueError:
pass
# 更新状态栏统计信息
app.port_count_var.set(f"端口数量: {tcp_count + udp_count}")
app.active_processes_var.set(f"进程数: {len(processes)}")
app.tcp_connections_var.set(f"TCP: {tcp_count}")
app.udp_connections_var.set(f"UDP: {udp_count}")
app.status_var.set("就绪")
except Exception as e:
app.status_var.set(f"加载数据出错: {str(e)}")
AI 助力开发
在开发过程中,AI 工具起到了很大的辅助作用:
-
快速生成基础代码框架,减少重复劳动
-
提供 UI 设计建议,帮助优化界面布局
-
解决特定技术难题,如进程权限处理、端口信息解析等
-
自动生成文档和注释,提高代码可维护性
借助 AI 的加持,原本需要数天的开发工作,短短一天内就完成了核心功能的实现和初步优化。
工具获取与使用
源码地址
项目开源在 GitCode,欢迎大家 star 和 fork:https://gitcode.com/Li_Ya_Fei/KPort
下载使用
对于不想编译源码的用户,可以直接下载打包好的可执行文件: https://pan.baidu.com/s/1Rn0PHt1zzNt01ddKgVZntA?pwd=kqv9
使用说明
-
直接运行程序即可查看所有端口占用情况
-
在搜索框中输入关键词可快速筛选端口
-
双击端口项查看进程详情
-
选中端口项后点击 “终止进程” 按钮可释放端口
-
使用 F5 键可快速刷新端口信息
结语
这款端口管理工具虽然简单,但却能实实在在地解决开发中的一个痛点问题。通过图形化界面,我们将原本需要记忆和输入命令的操作,简化为直观的点击和筛选,极大地提升了工作效率。
未来,我还计划增加端口占用历史记录、端口列表导出等功能,让工具更加完善。如果你有任何建议或问题,欢迎在 GitCode 上提交 issue 或 pull request。
希望这款小工具能为大家的开发工作带来便利!
更多推荐


所有评论(0)