Как получить порты что процесс в слушании на?

Как я получаю порты, что процесс слушает при использовании Python? Pid процесса известен.

19
задан Dominique 7 June 2010 в 05:04
поделиться

3 ответа

Вы можете использовать netstat -lnp , последний столбец будет содержать pid и имя процесса. В Python вы можете анализировать вывод этой команды.

1
ответ дан 30 November 2019 в 02:33
поделиться

Если вы не хотите анализировать вывод такой программы, как netstat или lsof, вы можете ползать по файловой системе / proc и попытаться найти документацию по файлам внутри. / proc / / net / tcp может быть особенно интересным для вас. Конечно, формат этих файлов может меняться между выпусками ядра, поэтому вывод команды синтаксического анализа обычно считается более надежным.

4
ответ дан 30 November 2019 в 02:33
поделиться

Мой ответ состоит из двух частей:

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, используя модуль подпроцесса , например:

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]

Надеюсь это поможет!

23
ответ дан 30 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: