在Python中,查看进程打开的端口通常涉及到系统级别的操作,因为端口是与操作系统的网络堆栈相关联的。以下是一些方法来查看进程打开的端口:
psutil
库psutil
是一个跨平台的库,用于检索有关正在运行的进程和系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它可以用来查看进程打开的端口。
首先,你需要安装 psutil
:
pip install psutil
然后,你可以使用以下代码来查看所有进程打开的端口:
import psutil
for proc in psutil.process_iter(['pid', 'name', 'connections']):
for conn in proc.info['connections']:
if conn.status == 'LISTEN':
print(f"Process {proc.info['pid']} ({proc.info['name']}) is listening on {conn.laddr}")
socket
库如果你想查看特定进程打开的端口,你可以使用 socket
库来获取进程的网络连接信息。
import socket
import os
def get_process_ports(pid):
try:
# 获取进程的网络命名空间
with open(f'/proc/{pid}/fdinfo', 'r') as f:
for line in f:
if 'socket' in line:
inode = int(line.split()[9])
for s in socket.socket(socket.AF_INET, socket.SOCK_STREAM).getsockname():
if s[0] == inode:
print(f"Process {pid} is using port {s[1]}")
except FileNotFoundError:
print(f"Process {pid} not found")
# 替换下面的 PID 为你想要查询的进程ID
get_process_ports(1234)
你也可以通过Python的 subprocess
模块来执行系统命令,比如 netstat
或 ss
,来查看端口信息。
import subprocess
def get_open_ports():
result = subprocess.run(['ss', '-tuln'], capture_output=True, text=True)
print(result.stdout)
get_open_ports()
psutil
或其他库时,要注意版本兼容性问题。sudo
来运行脚本,或者以管理员身份运行Python解释器。FileNotFoundError
。应该添加适当的异常处理来避免程序崩溃。以上就是在Python中查看进程打开端口的方法和相关信息。希望这对你有所帮助。
领取专属 10元无门槛券
手把手带您无忧上云