如何获取进程使用python监听的端口?该过程的PID是已知的。如何获取进程在监听的端口?
17
A
回答
1
您可以使用netstat -lnp
,最后一列将包含pid和进程名称。在Python中,您可以解析此命令的输出。
4
如果您不想分析像netstat或lsof这样的程序的输出,可以通过/ proc文件系统进行拼凑,并尝试查找其中的文件的相关文档。 /proc/<pid>/net/tcp
可能对你特别有意思。当然,这些文件的格式可能会在内核版本之间改变,所以解析命令输出通常被认为更可靠。
21
有两个部分,以我的回答:
1.获取在外壳
在第一部分,netstat
会工作的信息,但我更喜欢使用lsof
,因为它可以用于提取更丰富和简洁的清单。确切的选项使用基于您的操作系统,内核和编译选项可能会有所不同,但我相信你想是这样的:
lsof -a -p23819 -i4
哪里23819
是你所选择的PID,以及i4
表示所有的IPv4套接字(尽管您可能想要IPv6的i6
,视情况而定)。从那里,你可以通过grep管道来选择只有监听套接字。
lsof -a -p23819 -i4 | grep LISTEN
(在4.82 lsof
版本,您还可以使用-sTCP:LISTEN
标志,而不是grep
选择侦听套接字,虽然此选项似乎没有可用回到4.78版本)
2。
:从Python的你应该能够调用lsof
和读取输出,从Python中,使用subprocess
模块,像这样调用
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]
希望这有助于!
15
您可以使用psutil:
>>> import psutil
>>> p = psutil.Process(2549)
>>> p.name()
'proftpd: (accepting connections)'
>>> p.connections()
[connection(fd=1, family=10, type=1, local_address=('::', 21), remote_address=(), status='LISTEN')]
...若要筛选监听套接字:
这是没有提到>>> [x for x in p.get_connections() if x.status == psutil.CONN_LISTEN]
[connection(fd=1, family=10, type=1, local_address=('::', 21), remote_address=(), status='LISTEN')]
>>>
0
一件事。 python中的大多数端口应用程序都有一个命令行参数。您可以解析/ proc/pid/cmdline并解析出端口号。这避免了在具有大量连接的服务器上使用ss或netstat的大量开销。
相关问题
- 1. 获取端口演员正在监听
- 2. netty4:如何在多个端口上监听一个java进程
- 3. 工作进程应该如何监听同一个端口
- 4. 如何等待其他进程开始监听本地端口?
- 5. 获取服务器正在监听的端口号?
- 6. 如何设置Apache监听端口43
- 7. 如何停止监听端口
- 8. 如何获取EJB侦听端口?
- 9. 如何在运行时获取weblogic管理的服务器监听端口?
- 10. 监听远程计算机端口
- 11. 找出哪些端口的进程监听通过PHP
- 12. 进程监听Windows上的哪个端口
- 13. Winsock端口监听器
- 14. WCF监听TCP端口
- 15. Eclipse监听端口42540(?)
- 16. 使用JScript监听端口
- 17. Python端口监听器
- 18. 停止监听端口
- 19. C#监听80端口
- 20. 写端口监听器
- 21. MATLAB监听TCP/IP端口
- 22. Nginx无法监听端口
- 23. 码头监听UDP端口
- 24. ProxyServlet.Transparent监听哪个端口?
- 25. 两个进程如何在Windows 7中监听同一个端口?
- 26. com.jcraft.jsch.JSchException:远程端口转发失败的监听端口19999
- 27. twisted - 获取OS选择的监听端口
- 28. 设置清漆监听不同的端口,而Apache监听端口80
- 29. 如何更改应用程序的监听端口
- 30. 任何语言 - 端口监听器? [UDP]
谢谢。 psutil是一个很好的模块。但唯一的问题是使用模块需要先安装它。安装psutil需要安装gcc和python头文件。所以使用psutil的项目很难安装。 – mtoloo 2011-12-22 06:25:00
psutil需要gcc,因为它包含需要编译的C代码。我不会说它很难安装,特别是在Linux上。例如,在Ubuntu上,您只需“apt-get install python-dev”和“pip install psutil”即可完成。 – 2014-10-22 12:59:17