Определите PID процесса, который передает пакеты icmp

Я написал программу, которая будет создавать и передавать пакеты icmp по сети.

Теперь я хочу написать программу, которая будет идентифицировать процессы (PID) в системе, передающие пакеты icmp. Если я не ошибаюсь, возможным выводом этой программы будет PID предыдущей программы, которую я закодировал, и некоторые системные процессы, создающие и передающие icmp-пакеты.

ПРИМЕЧАНИЕ. Я использовал python для кодирования, scapy для управления пакетами и PySide для графического интерфейса (дополнительная информация). Я запускаю эту программу в Fedora 20 в VMWare.


person Rob    schedule 27.04.2014    source источник
comment
Возможно, можно получить всю необходимую информацию из /proc, но если вы написали программу, отправляющую ICMP-пакеты, было бы НАМНОГО проще, чтобы программа отправки ICMP запустила файл в /var/run или тому подобное. который содержит его PID. Ваша вторая программа может прочитать PID из этого файла. Если они созависимы, то первый может породить второй, передав ему свой PID.   -  person tMC    schedule 29.04.2014
comment
@tMC: Можете ли вы объяснить, как работает каталог /var/run? И еще вопрос, в каталоге /proc можно узнать, отправляет ли процесс ICMP-пакет или нет?   -  person Rob    schedule 29.04.2014


Ответы (1)


Поскольку вы написали первую программу, было бы намного проще просто записать свой собственный PID в файл запуска, который вы можете использовать во второй программе. Что-то вроде этого:

Первая программа:

open('/var/run/program.pid', 'w').write(str(os.getpid()))

Во второй программе:

pid = int(open('/var/run/program.pid', 'r').read())

Вам нужно будет добавить обработку ошибок и т. д.; но это основная идея.

person tMC    schedule 29.04.2014
comment
Это может быть решением, но другой вопрос, что, если я не знаю PID 1-й программы? Я имею в виду, что я не знаю, запущена ли первая программа или нет, а вторая программа постоянно проверяет процесс, который отправляет пакет ICMP. Как вы будете решать тогда? - person Rob; 29.04.2014
comment
Первая программа «знает» свой собственный pid (через функцию getpid), который она записывает в файл запуска. если вы хотите убедиться, что первая программа работает через вторую, вы можете убедиться, что файл pid существует и что процесс, идентифицированный pid, который вы читаете из этого файла, является ожидаемым процессом. Это легко сделать через каталог /proc/<pid>. - person tMC; 29.04.2014
comment
Позвольте мне объяснить вам полный сценарий. Этот вопрос является небольшой частью моего проекта безопасности. 1-я программа — это программа злоумышленника, которая отправляет icmp-пакет. 2-я программа — это программа обнаружения, которая идентифицирует процесс, создающий и передающий пакеты. Так что, естественно, 1-я программа, то есть программа злоумышленника, не будет раскрывать свой pid. - person Rob; 29.04.2014