python – 如何获取一个进程在侦听的端口?

如何使用Python获取一个进程正在侦听的端口?该过程的pid是已知的.
最佳答案
我的答案有两个部分:

1.将信息存入shell

对于第一部分,netstat将工作,但我更喜欢使用lsof,因为它可以用于提取更多的信息和简明的列表.确切的使用选项可能会根据您的操作系统,内核和编译选项而有所不同,但我相信您需要这样:

lsof -a -p23819 -i4

其中23819是您选择的PID,i4表示所有IPv4套接字(尽管您可能希望IPv6为IPv6,视情况而定).从那里,您可以通过grep进行管道以仅选择收听套接字.

lsof -a -p23819 -i4 | grep LISTEN

(在4.82版本中,您还可以使用-sTCP:LISTEN标志而不是grep来选择侦听套接字,尽管此选项在4.78版中似乎不可用)

2.从Python调用lsof

您应该能够使用子进程模块调用lsof并从Python读取输出,如下所示:

from subprocess import Popen, PIPE
p1 = Popen(['lsof', '-a', '-p23819', '-i4'], stdout=PIPE)
p2 = Popen(["grep", "LISTEN"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

希望这可以帮助!

转载注明原文:python – 如何获取一个进程在侦听的端口? - 代码日志