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

结合GPT与Python实现端口检测工具(含多线程)

在这里插入图片描述

端口检测器是一个非常实用的网络工具,它主要用于检测服务器或本地计算机上的特定端口是否处于开放状态。通过这个工具,你可以快速识别和诊断网络连接问题,确保关键服务的端口能够正常接收和处理数据。这对于网络管理员和开发者来说是一个不可或缺的诊断工具,帮助他们维护网络健康,优化系统性能,以及及时发现和解决潜在的安全隐患。

一、下载体验

下载地址:https://ewbang.lanzoul.com/intM027ov67i

二、程序源码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 作者:Roc-xbimport encodings.idna
import socket
import tkinter as tk
from tkinter import messagebox, ttk
from concurrent.futures import ThreadPoolExecutor, as_completed
import redef check_port(ip_or_domain, port):try:with socket.create_connection((ip_or_domain, port), timeout=1):return Trueexcept (socket.timeout, socket.error):return False# 检查是否是域名或者IP
def is_ip_or_domain(input_str):# IP地址的正则表达式ip_pattern = r'^\d{1,3}(\.\d{1,3}){3}$'# 域名的正则表达式,这个比较简单,可以根据需要扩展domain_pattern = r'^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,})$'if re.match(ip_pattern, input_str) or re.match(domain_pattern, input_str):return Trueelse:return Falsedef on_check():ip_or_domain = ip_entry.get().strip() or "127.0.0.1"if not is_ip_or_domain(ip_or_domain):messagebox.showwarning("输入错误", "输入域名或IP不合法")returnports_input = port_entry.get().strip() or "22,23,80,3389,443,5432,6379,1433,1521,3306"if not ports_input:messagebox.showwarning("输入错误", "请输入端口号")returnelse:try:print(ports_input)selected_ports = [int(p.strip()) for p in ports_input.split(",")]except ValueError as exc:messagebox.showerror("错误", "端口号输入不正确,请确保所有端口号都是数字: {}".format(exc))returnresult_list.delete(*result_list.get_children())# 配置标签result_list.tag_configure('green', foreground='green', font=16)result_list.tag_configure('red', foreground='red', font=16)# 使用线程池来并行检查端口with ThreadPoolExecutor(max_workers=10) as executor:future_to_port = {executor.submit(check_port, ip_or_domain, port): port for port in selected_ports}for future in as_completed(future_to_port):port = future_to_port[future]try:status = future.result()result = "开放" if status else "关闭"result_color = "green" if status else "red"# 插入带有颜色的行result_list.insert("", "end", values=(ip_or_domain, port, result), tags=(result_color,))except Exception as exc:messagebox.showerror("错误", "端口号输入不正确,请确保所有端口号都是数字: {}".format(exc))def on_clear():ip_entry.delete(0, tk.END)port_entry.delete(0, tk.END)result_list.delete(*result_list.get_children())if __name__ == '__main__':# 创建主窗口root = tk.Tk()root.title("端口检查器(作者QQ:327844761)")# 禁止调整窗口大小root.resizable(0, 0)# 创建输入框和标签tk.Label(root, text="IP或域名 (默认: 127.0.0.1)").grid(row=0, column=0, padx=10, pady=10)ip_entry = tk.Entry(root, width=30)ip_entry.grid(row=0, column=1, padx=10, pady=10)tk.Label(root, text="端口号 (逗号分隔)").grid(row=1, column=0, padx=10, pady=10)port_entry = tk.Entry(root, width=30)port_entry.grid(row=1, column=1, padx=10, pady=10)# 创建按钮check_button = tk.Button(root, text="检查端口", command=on_check)check_button.grid(row=6, column=0, padx=5, pady=5)clear_button = tk.Button(root, text="清空输入", command=on_clear)clear_button.grid(row=6, column=1, padx=5, pady=5)# 创建结果显示列表result_list = ttk.Treeview(root, columns=("IP/域名", "端口", "状态"), show="headings")result_list.heading("IP/域名", text="IP/域名", anchor="center")result_list.heading("端口", text="端口", anchor="center")result_list.heading("状态", text="状态", anchor="center")# 设置每一列内容居中显示result_list.column("IP/域名", anchor="center")result_list.column("端口", anchor="center")result_list.column("状态", anchor="center")result_list.grid(row=7, column=0, columnspan=2, padx=10, pady=10)# 添加滚动条scrollbar = ttk.Scrollbar(root, orient="vertical", command=result_list.yview)result_list.configure(yscroll=scrollbar.set)scrollbar.grid(row=7, column=2, sticky="ns")# 计算窗口居中所需的宽度和高度window_width = 620window_height = 400position_right = int(root.winfo_screenwidth() / 2 - window_width / 2)position_down = int(root.winfo_screenheight() / 2 - window_height / 2)# 设置窗口大小和位置root.geometry("{}x{}+{}+{}".format(window_width, window_height, position_right, position_down))# 启动主循环root.mainloop()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Meachines] [Easy] Legacy nmap 漏洞扫描脚本深度发现+MS08-067
  • Java编程:单一职责原则
  • 辨析sizeof() 和strlen函数(包含相关二级习题)
  • html+css+js网页设计 电商 折扣社7个页面
  • [000-01-011].第2节:持久层方案的对比
  • 鸿蒙(API 12 Beta3版)【使用ImageEffect编辑图片】图片开发指导
  • CSM数采系统助力高压动力系统的效率测量
  • 计算机四级必背-操作系统
  • 探索上门回收旧衣物系统源码开发的创新与挑战
  • Flutter Listview 缓存item滑动后不进行重新渲染
  • “论面向服务架构设计及其应用”写作框架,软考高级,系统架构设计师
  • Selenium与Web Scraping:自动化获取电影名称和评分的实战指南
  • 中级经济师考试通过率有多少?难度如何?
  • Android 架构模式之 MVP
  • 编程之路:从挫折到突破的心路历程
  • [数据结构]链表的实现在PHP中
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • JavaScript 基础知识 - 入门篇(一)
  • Java方法详解
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Laravel 实践之路: 数据库迁移与数据填充
  • magento2项目上线注意事项
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • STAR法则
  • ucore操作系统实验笔记 - 重新理解中断
  • 读懂package.json -- 依赖管理
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 算法-图和图算法
  • 通过几道题目学习二叉搜索树
  • 栈实现走出迷宫(C++)
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 如何在招聘中考核.NET架构师
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Redis 入门到精通(九)-- 主从复制(1)
  • # 飞书APP集成平台-数字化落地
  • #DBA杂记1
  • (04)odoo视图操作
  • (2.2w字)前端单元测试之Jest详解篇
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (ibm)Java 语言的 XPath API
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)从 Java 代码到 Java 堆
  • .Net 应用中使用dot trace进行性能诊断
  • [ C++ ] 类和对象( 下 )
  • [《百万宝贝》观后]To be or not to be?
  • [2669]2-2 Time类的定义
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作