Как получить доступ к данным netstat в Python?

Я пытаюсь получить доступ/проанализировать все исходящие соединения на определенном номере порта на машине Linux с помощью скрипта Python. Простейшей реализацией, по-видимому, является открытие подпроцесса для netstat и анализ его stdout.

Я предполагаю, что у кого-то где-то была эта проблема раньше, и я удивлен, что не нашел никаких парсеров netstat в интернете. Разве это не достаточно большая проблема для людей, чтобы чувствовать потребность поделиться?

3 ответов


основную информацию, которая вам может понадобиться, можно найти в / proc documentation Если вы хотите увидеть пример взгляните на: python netstat менее чем в 100 строках кода


Если вы хотите управлять открытым соединением некий процесс вы можете использовать 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.

Edit: начиная с psutil 2.1.0 вы также можете собрать


вместо анализа вывода из netstat вы можете просмотреть запись /proc для каждого процесса, чтобы увидеть открытые сокеты. Есть довольно простой Perl-скрипт, который делает это что вы можете перевести на python.