以下是一个按进程分组显示开放端口的示例代码:
import subprocess
# 获取所有的开放端口
result = subprocess.run(['netstat', '-ano'], capture_output=True, text=True)
# 按行分割结果
lines = result.stdout.split('\n')
# 创建一个空字典来存储端口和对应的进程
port_process_map = {}
# 解析每一行结果
for line in lines:
if 'LISTENING' in line:
# 提取端口号和进程ID
parts = line.split()
port = parts[1].split(':')[-1]
process_id = parts[-1]
# 通过进程ID获取进程名
process_result = subprocess.run(['tasklist', '/FI', 'PID eq {}'.format(process_id)], capture_output=True, text=True)
process_name = process_result.stdout.split('\n')[2].split()[0]
# 将端口和进程名添加到字典中
if port in port_process_map:
port_process_map[port].append(process_name)
else:
port_process_map[port] = [process_name]
# 按进程分组显示开放端口
for port, processes in port_process_map.items():
print('Port {}:'.format(port))
print(' {}'.format('\n '.join(processes)))
print()
这个示例使用了netstat
命令来获取开放端口的信息,并使用tasklist
命令来获取每个进程的名称。然后,它将端口和对应的进程名存储在一个字典中,并按进程分组显示开放端口的结果。