如何獲取進程使用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