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)
相关推荐
青 春 记 忆4 分钟前
LeetCode 234. 回文链表|Python 解法详解
python·leetcode·链表
招财小梗6 分钟前
沈阳AI企业服务真能降本增效?
大数据·人工智能·python
孫治AllenSun13 分钟前
【JavaAI】LangChain4J(1) Windows 安装 Ollama 本地大模型
人工智能·windows
敲代码还房贷19 分钟前
安装wsl报错:HCS_E_HYPERV_NOT_INSTALLED
linux·python·ubuntu
whcyhhh32 分钟前
头歌实践教学平台:数据科学与大数据技术导论(九下)
大数据·python
一直C42 分钟前
【Linux应用编程】深入理解Linux多任务机制:进程原理、状态转换与进程控制实战
linux·开发语言·算法·ubuntu·vim·visual studio code
名字还没想好☜1 小时前
Python asyncio.Queue 实战:用生产者-消费者给爬虫/任务流限速又解耦
开发语言·爬虫·python·并发·asyncio
FORCECON11 小时前
力控SCADA工程升级:信创跨平台迁移方案,快速搭建安全自主的工业监控系统
linux·windows·自动化·信创·scada·监控组态软件
我命由我123451 小时前
人脸识别 - 判断人脸是否在画面中央
java·人工智能·python·java-ee·人脸识别·android jetpack·android runtime
Black_Rock_br1 小时前
本地AI工具更新,#DSH Desktop桌面端# 正式发布迭代
人工智能·python·开源·运维开发·开源软件