Как найти процесс, отправляющий пинг на 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
Вы можете сделать это с помощью systemtap, который может отслеживать все подсистемы, поэтому вам не нужно проверять состояние системы на конкретный момент - вы можете регистрировать события:
https://sourceware.org/systemtap/SystemTap_Beginners_Guide/useful-systemtap-scripts.html
Для отправки пакетов эхо-запроса ICMP требуются привилегии root. Итак, у вас есть 2 варианта:
Примеры команд:
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, а первая и вторая - нет.