Мой ответ состоит из двух частей:
1. Получение информации в оболочке
Для первой части будет работать netstat
, но я предпочитаю использовать lsof
, поскольку его можно использовать для извлечения более информативного и краткого списка. Точные параметры могут различаться в зависимости от вашей ОС, ядра и параметров компиляции, но я думаю, что вы хотите что-то вроде этого:
lsof -a -p23819 -i4
Где 23819
- это PID, для которого вы выбираете, а i4
обозначает все сокеты IPv4 (хотя вы можете указать i6
для IPv6, в зависимости от ситуации). Оттуда вы можете передать через grep, чтобы выбрать только прослушивающие сокеты.
lsof -a -p23819 -i4 | grep LISTEN
(В lsof
версии 4.82 вы можете дополнительно использовать флаг -sTCP:LISTEN
вместо grep
для выбора прослушивающих сокетов, хотя эта опция недоступна в версии 4.78)
2. Звонок lsof
с 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]
Надеюсь, это поможет!