Как я могу получить порты, связанные с приложением, которое их открыло? - PullRequest
5 голосов
/ 22 июля 2010

Мне нужно получить список всех открытых портов на моей машине и какое приложение их открыло.Мне нужно получить эту информацию программно.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 22 июля 2010

Я надеялся, что появится более умный ответ.Я сделал это (программно на Python), пытаясь переписать программу под названием NetHogs.Моя версия здесь , в частности здесь представлен модуль в Python , используемый для анализа таблицы из /proc.Если вы не Python грамотный (изучите его), взгляните на оригинальные NetHogs , в которых используется смесь C / C ++ (и немного болезненно читатьследовательно, переписать).

Стоит отметить, что обширные или быстро повторяющиеся попытки парсинга информации о сокетах из /proc сильно нагружают ЦП, поскольку операционная система должна обрабатывать каждый сделанный системный вызов и динамически анализировать внутренние структуры.Таким образом, вы найдете некоторые кеширующие и временные предположения, сделанные в источнике обоих проектов, с которыми я вас связал.

Короче говоря, вам нужно связать иноды сокетов, данные для каждого процесса, в/proc/<pid>/fd к соединениям, указанным в /proc/net/<proto>.Опять же, пример разбора, и как найти все это присутствует в обоих проектах.

2 голосов
/ 22 июля 2010

Вы должны реализовать следующее:

  1. розетка = ls -l /proc/<pid>/fd | grep socket | sed 's/.*socket:\[//' | sed 's/\]//'

  2. grep $ socket / proc / net / tcp

  3. Анализ выходных данных предыдущей команды (вторая запись содержит информацию о порте)

0 голосов
/ 21 октября 2011
ss -nltup 
netstat -ltupn
lsof  -iTCP -sTCP:LISTEN

Редактировать: Ах, извините, не программно. Но полезно, если вы хотите развить процесс. Нет смысла заново изобретать колесо.

0 голосов
/ 22 июля 2010

Информация об открытых файлах (включая сокеты) может быть извлечена из каталога /proc.

Эта статья дает много подробностей и дает вам начало.

0 голосов
/ 22 июля 2010
exec('netstat');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...