在日常生活中需要快速找到占用特定端口的进程,以便进行故障排查,可以通过以下工具输入要查询的端口号并点击查找按钮。该工具会遍历系统中的进程,找到占用该端口的进程,并显示相关信息,如进程ID、进程名、命令行、创建时间、进程状态和进程用户名。通过这个工具,可以快速定位问题,并进行进一步的故障排查和管理操作。
代码:
import psutil import tkinter as tk from tkinter import messagebox def find_process_by_port(): port = entry.get() if not port.isdigit(): messagebox.showerror("错误", "请输入正确的端口号") return port = int(port) processes = [] for proc in psutil.process_iter(): processes.append(proc) for proc in processes: for conn in proc.connections(): if conn.laddr.port == port and conn.status == "LISTEN": result = f"占用端口 {port} 的进程 ID 为: {proc.pid}\n" result += f"占用端口 {port} 的进程信息:\n" result += f"进程ID: {proc.pid}\n" result += f"进程名: {proc.name()}\n" result += f"命令行: {' '.join(proc.cmdline())}\n" result += f"创建时间: {proc.create_time()}\n" result += f"进程状态: {proc.status()}\n" result += f"进程用户名: {proc.username()}\n\n" result_label.config(text=result) return result_label.config(text="未找到占用指定端口的进程") def show_help(): help_window = tk.Toplevel(window) help_window.title("帮助信息") help_window.geometry("630x580") help_window.configure(bg="#F0F0F0") help_text = """ 20:FTP数据端口 21:FTP控制端口 22:SSH(Secure Shell)远程登录协议 23:Telnet远程登录协议 25:SMTP(Simple Mail Transfer Protocol)邮件传输协议 53端口:用于DNS(Domain Name System,域名系统),用于将域名转换为IP地址。 67和68端口:分别用于BOOTP(Bootstrap Protocol)服务,用于自动配置网络设备。 69端口:用于TFTP(Trivial File Transfer Protocol),也用于简单的文件传输。 79端口:用于Finger服务,提供远程主机的用户信息。 80:HTTP(Hypertext Transfer Protocol)网页浏览 99端口:用于Metagram Relay服务,这是一个不太常见的服务。 109端口:用于POP2(Post Office Protocol v2),用于接收邮件。 110:POP3(Post Office Protocol 3)邮局协议 135:RPC(Remote Procedure Call)远程过程调用端口。RPC是一种用于在不同计算机之间进行通信和调用远程程序的协议。在Windows操作系统中,135端口用于提供远程过程调用服务,允许远程计算机执行本地计算机上的程序。 143:IMAP(Internet Message Access Protocol)互联网消息访问协议 443:HTTPS(Hypertext Transfer Protocol Secure)安全网页浏览 3389:远程桌面协议(Windows远程桌面服务) 3306:MySQL数据库服务 5432:PostgreSQL数据库服务 8080:HTTP代理服务器常用端口 8443:HTTPS代理服务器常用端口 """ help_label = tk.Label(help_window, text=help_text, wraplength=600, justify="left", font=("Arial", 12), bg="#F0F0F0") help_label.pack(pady=10) # 创建GUI窗口 window = tk.Tk() window.title("查找占用端口进程工具---微信公众号:蓝胖子之家") window.geometry("600x530") window.configure(bg="#F0F0F0") # 创建标题标签 title_label = tk.Label(window, text="查找占用端口进程工具", font=("Arial", 20), bg="#F0F0F0") title_label.pack(pady=10) # 创建标签和输入框 label = tk.Label(window, text="请输入查询的端口号:", font=("Arial", 14), bg="#F0F0F0") label.pack(pady=10) entry = tk.Entry(window, width=30, font=("Arial", 14)) entry.pack(pady=10) # 创建按钮 button = tk.Button(window, text="查找", command=find_process_by_port, font=("Arial", 14), bg="#4CAF50", fg="white") button.pack(pady=10) # 创建帮助按钮 help_button = tk.Button(window, text="常用端口", command=show_help, font=("Arial", 14), bg="#2196F3", fg="white") help_button.pack(pady=10) # 创建结果显示标签 result_label = tk.Label(window, wraplength=500, justify="left", font=("Arial", 14), bg="#F0F0F0") result_label.pack() # 运行GUI窗口 window.mainloop()
- 导入所需的库:psutil用于获取系统进程信息,tkinter用于创建GUI窗口,messagebox用于显示错误信息。
- 定义一个函数find_process_by_port(),用于查找占用指定端口的进程信息。
- 在函数中,首先获取用户输入的端口号,并进行合法性检查,如果输入不是数字,则弹出错误提示框。
- 然后,通过psutil库的process_iter()函数获取系统中所有的进程信息,并将其存储在一个列表中。
- 接下来,遍历进程列表,对于每个进程,再遍历其连接信息。如果找到占用指定端口且状态为"LISTEN"的连接,就将该进程的相关信息存储在一个字符串变量result中。
- 最后,将result显示在GUI窗口中的一个标签(result_label)中。
- 如果没有找到占用指定端口的进程,就在result_label中显示"未找到占用指定端口的进程"。
- 定义一个函数show_help(),用于显示帮助信息。该函数创建一个新的顶级窗口(help_window),并在其中显示帮助文本。
- 创建GUI窗口(window),设置窗口标题、大小和背景颜色。
- 创建标题标签(title_label),显示工具的标题。
- 创建标签(label)和输入框(entry),用于输入要查询的端口号。
- 创建按钮(button),点击后调用find_process_by_port()函数来查找占用端口的进程。
- 创建帮助按钮(help_button),点击后调用show_help()函数来显示帮助信息。
- 创建结果显示标签(result_label),用于显示查找结果。
运行效果:
工具
链接:https://pan.baidu.com/s/19LF3mn9OHUc87OPA5biiGQ 提取码:fxga
原文始发于微信公众号(蓝胖子之家):Python写端口查询进程工具
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论