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

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)

相关文章:

  • 675SJBH国防生阅览室图书管理系统
  • rust程序静态编译的两种方法总结
  • Rust 开发环境搭建与插件
  • CLR是什么
  • mqtt选型,使用
  • WHAT - react-query(TanStack Query) vs swr 请求
  • 浙大与哈佛联合开源图像编辑模型IC-Edit,实现高效、精准、快速的指令编辑~
  • .NET中使用HTTPS全解析
  • android-ndk开发(9): undefined reference to `__aarch64_ldadd4_acq_rel` 报错分析
  • 网络靶场基础知识
  • rest_framework学习之认证 权限
  • 重定向及基础实验
  • Python变量作用域
  • [学习]RTKLib详解:ephemeris.c与rinex.c
  • 如何修复WordPress数据库
  • Vscode (Windows端)免密登录linux集群服务器
  • Linux中的防火墙
  • 【Linux学习笔记】基础IO之理解文件
  • 学成在线之缓存
  • 【金仓数据库征文】金仓数据库 KES:MySQL 迁移实用指南
  • 中华人民共和国和俄罗斯联邦在纪念中国人民抗日战争、苏联伟大卫国战争胜利和联合国成立80周年之际关于进一步深化中俄新时代全面战略协作伙伴关系的联合声明
  • 山寨“小米”智能马桶、花洒销售额过亿,被判赔3500万元
  • 明查|这是“C919迫降在农田”?实为飞机模型将用于科普体验
  • 个人住房公积金贷款利率下调,100万元30年期贷款总利息将减少近5万元
  • 古龙逝世四十周年|中国武侠文学学会与多所高校联合发起学术纪念活动
  • 金融监管总局将推出8项增量政策:涉房地产金融、险资入市、稳外贸等