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

1、pip install tabulate

2、代码实现

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Windows端口监听程序
显示本机处于监听状态的端口,进程ID和程序名称
"""

import subprocess
import re
import os
import sys
from tabulate import tabulate

def 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:
                # 提取本地地址和PID
                local_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_info
    
    except 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)
相关推荐
DLYSB_3 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
运维·ceph·python·报警灯
阿童木写作3 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
隐积4 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt
阿童木写作5 小时前
Python实现Temu图片批量翻译自动化教程
运维·人工智能·python·自动化
就是一只白6 小时前
复制地理信息python版本
python
看浪的路人6 小时前
第1讲:Agent 到底是什么?和 Chatbot 有什么区别
python·ai
名字还没想好☜7 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
瓦学妹7 小时前
什么是网络索引?它是如何工作的?
大数据·网络·python·网络爬虫
天天爱吃肉82187 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
初级代码游戏8 小时前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift