我想要使用Python腳本訪問/解析Linux機器上特定端口號上的所有傳出連接。最簡單的實現似乎是爲netstat打開一個子進程並解析它的stdout。如何訪問Python中的netstat數據?
我想象之前有人遇到過這個問題,並且很驚訝沒有在網上找到任何netstat解析器。這對於人們感到需要分享的問題來說還不夠大嗎?
我想要使用Python腳本訪問/解析Linux機器上特定端口號上的所有傳出連接。最簡單的實現似乎是爲netstat打開一個子進程並解析它的stdout。如何訪問Python中的netstat數據?
我想象之前有人遇到過這個問題,並且很驚訝沒有在網上找到任何netstat解析器。這對於人們感到需要分享的問題來說還不夠大嗎?
你能所需要的基本信息可以在/proc documentation 發現如果你想看到AA例如看看:A python netstat in less than 100 lines of code
除了解析netstat的輸出外,還可以查看每個進程的/ proc條目以查看打開的套接字。有一個相當簡單的perl script that does this,你可以翻譯成python。
如果你想控制的連接通過一定的程序打開您可以使用psutil:
>>> p = psutil.Process(1694)
>>> p.name()
'firefox'
>>> p.connections()
[connection(fd=115, family=2, type=1, local_address=('10.0.0.1', 48776), remote_address=('93.186.135.91', 80), status='ESTABLISHED'),
connection(fd=117, family=2, type=1, local_address=('10.0.0.1', 43761), remote_address=('72.14.234.100', 80), status='CLOSING'),
connection(fd=119, family=2, type=1, local_address=('10.0.0.1', 60759), remote_address=('72.14.234.104', 80), status='ESTABLISHED'),
connection(fd=123, family=2, type=1, local_address=('10.0.0.1', 51314), remote_address=('72.14.234.83', 443), status='SYN_SENT')]
內部psutil使用的/ proc。 如果您對系統級特定端口號的連接感興趣,則可以查看psutil如何實現它。
編輯:從psutil 2.1.0開始,你也可以使用net_connections()收集全系統的連接:
>>> import psutil
>>> psutil.net_connections()
[pconn(fd=115, family=2, type=1, laddr=('10.0.0.1', 48776), raddr=('93.186.135.91', 80), status='ESTABLISHED', pid=1254),
pconn(fd=117, family=2, type=1, laddr=('10.0.0.1', 43761), raddr=('72.14.234.100', 80), status='CLOSING', pid=2987),
pconn(fd=-1, family=2, type=1, laddr=('10.0.0.1', 60759), raddr=('72.14.234.104', 80), status='ESTABLISHED', pid=None),
pconn(fd=-1, family=2, type=1, laddr=('10.0.0.1', 51314), raddr=('72.14.234.83', 443), status='SYN_SENT', pid=None)
...]
psutil真的很棒!我已經開始最近使用它,它是一個救星!榮譽給作者! – fccoelho 2012-05-08 12:15:22
很高興你喜歡它 – 2013-06-09 23:25:15
更新:新的2.1.0版本能夠列出全系統套接字連接: http://grodola.blogspot.com/2014/04/reimplementing-netstat-in-cpython.html – 2014-04-08 22:55:55
完美,謝謝! – 2011-06-28 04:41:17