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

Windows环境,Python实现对本机处于监听状态的端口,打印出端口,进程ID,程序名称

1、pip install tabulate

2、代码实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-"""
Windows端口监听程序
显示本机处于监听状态的端口,进程ID和程序名称
"""import subprocess
import re
import os
import sys
from tabulate import tabulatedef get_listening_ports():"""获取所有处于监听状态的端口信息返回包含端口、PID和程序名称的列表"""try:# 使用netstat命令获取所有TCP监听端口netstat_output = subprocess.check_output('netstat -ano -p tcp | findstr "LISTENING"',shell=True, text=True)# 解析netstat输出port_info = []for line in netstat_output.splitlines():# 清理并分割行parts = re.split(r'\s+', line.strip())if len(parts) >= 5:# 提取本地地址和PIDlocal_address = parts[1]pid = parts[4]# 从本地地址中提取端口if ':' in local_address:port = local_address.split(':')[-1]# 获取进程名称try:process_info = subprocess.check_output(f'tasklist /fi "PID eq {pid}" /fo csv /nh',shell=True,text=True)# 解析进程信息if process_info and '","' in process_info:process_name = process_info.split('","')[0].strip('"')port_info.append({'port': port,'pid': pid,'program': process_name})except subprocess.SubprocessError:port_info.append({'port': port,'pid': pid,'program': 'Unknown'})return port_infoexcept subprocess.SubprocessError as e:print(f"获取端口信息时出错: {e}")return []def display_port_info(port_info):"""以表格形式显示端口信息"""if not port_info:print("未找到监听中的端口")return# 准备表格数据table_data = []for info in port_info:table_data.append([info['port'],info['pid'],info['program']])# 按端口号排序table_data.sort(key=lambda x: int(x[0]) if x[0].isdigit() else float('inf'))# 显示表格headers = ["端口", "进程ID", "程序名称"]print(tabulate(table_data, headers=headers, tablefmt="grid"))def main():"""主函数"""print("正在获取本机监听端口信息...\n")port_info = get_listening_ports()display_port_info(port_info)if __name__ == "__main__":try:main()except KeyboardInterrupt:print("\n程序被用户中断")except Exception as e:print(f"程序执行出错: {e}")sys.exit(1)

http://www.xdnf.cn/news/4783.html

相关文章:

  • 静态BFD配置
  • USB集线器芯片革新之战:CH334U如何以工业级性能重新定义HUB控制器
  • Python教程112:找到每月的第三个星期五(calendar)
  • 图表制作-带背景色的柱状图
  • C# NX二次开发:判断两个体是否干涉和获取系统日志的UFUN函数
  • 手撕基于AMQP协议的简易消息队列-3(项目所用到的工具类的编写)
  • DRF+Vue项目线上部署:腾讯云+Centos7.6
  • Android学习总结之kotlin协程面试篇
  • [学习]RTKLib详解:ephemeris.c与rinex.c
  • 77.组合问题
  • 基于Partial Cross Entropy的弱监督语义分割实战指南
  • ElasticSearch基本概念
  • Abaqus学习笔记
  • 解锁 LLM 推理速度:深入 FlashAttention 与 PagedAttention 的原理与实践
  • 如何对 Oracle 日志文件进行校验
  • AUBO STUDIO简介
  • Milvus(17):向量索引、FLAT、IVF_FLAT
  • 在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考
  • TDengine 在新能源行业应用
  • Java 线程全面概述
  • 在Excel图表添加辅助线
  • 在 YAFFS2 文件系统中,`yaffs_pread` 函数详解
  • 2.3 点云数据存储格式——LiDAR专用型点云存储格式
  • 003.chromium编译进阶-禁用css动画和禁用canvas渲染
  • 【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源
  • 【LangChain基础系列】深入全面掌握文本分类
  • pyorch中tensor的理解与操作(一)
  • java后端知识点复习
  • 图表制作-基础面积图
  • 在openEuler系统下编译安装Redis数据库指南