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)
相关推荐
Full Stack Developme1 分钟前
Hutool EnumUtil 教程
开发语言·windows·python
XMYX-03 分钟前
18 - Go 等待协程:WaitGroup 使用与坑
开发语言·golang
baidu_340998824 分钟前
PySpark中高效展开嵌套数组:避免笛卡尔爆炸的正确实践.txt
jvm·数据库·python
TechWayfarer6 分钟前
IP定位API接口怎么选?在线、离线还是混合?一套决策框架
网络·python·tcp/ip
feifeigo1236 分钟前
基于遗传算法的矩形排样MATLAB实现
开发语言·matlab
weixin_5806140010 分钟前
如何自动同步SQL多语言字段_通过触发器实现国际化更新
jvm·数据库·python
csdn_aspnet10 分钟前
告别重复造轮子:Codex写脚本,运维/DevOps场景下,用Codex批量生成Shell/Python自动化脚本
运维·python·ai·自动化·devops·codex·辅助编程
他是龙55110 分钟前
65:JS安全&浏览器插件&工具箱等
开发语言·javascript·安全
csbysj202010 分钟前
Rust 输出到命令行
开发语言
likerhood14 分钟前
Java 中的 `clone()` 与 `Cloneable` 接口详解
java·开发语言·python