Назад | Перейти на главную страницу

как найти процесс, который пингует локальный хост

Как найти процесс, отправляющий пинг на localhost? Хотя это не сценарий, где команда ping может быть просто grep из таблицы процессов.

Я использовал wirehark, но выяснить, какой процесс на самом деле вызывает пинг, не помогает.

Большое спасибо за любую подсказку.

Команда sudo lsof -n |grep "st=07" похоже работает.

Чтобы проверить это, я запустил ping как показано ниже на одном терминале для генерации пакетов ICMP

arul@cheetah:~$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.049 ms

На другом терминале я запустил lsof как показано ниже. Вы можете видеть, что в выходных данных показан процесс и pid, являющийся источником пакетов ICMP.

arul@cheetah:~$ sudo lsof -n |grep "st=07"
ping       3344                   arul    3u      raw                         0t0     602086 00000000:0001->00000000:0000 st=07

источник: https://stackoverflow.com/questions/23327689/identify-the-pid-of-process-which-is-transmitting-icmp-packets

Вы можете сделать это с помощью systemtap, который может отслеживать все подсистемы, поэтому вам не нужно проверять состояние системы на конкретный момент - вы можете регистрировать события:

https://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html

Для отправки пакетов эхо-запроса ICMP требуются привилегии root. Итак, у вас есть 2 варианта:

  • проверьте таблицу процессов для процессов, запущенных с учетной записью root или с битом SUID
  • проверьте процесс "пинга"

Примеры команд:

ps aux |grep ping
ps aux |grep root |grep -v \\[

Затем проверьте все результаты второй команды, если конкретный двоичный файл имеет бит SUID:

ls -l `which dhclient`
ls -l `which getty`
ls -l `which passwd`
ls -l `which ping`

Как видно из списка разрешений, третья и четвертая программы имеют бит SUID, а первая и вторая - нет.