Запустите tcpdump в цикле - PullRequest
0 голосов
/ 05 июня 2018

Я хотел бы запустить скрипт, который захватывает трафик с сервера, используя tcpdump и ping.

Я хочу, чтобы он запустил tcpdump, сделал паузу, пинговал конечную точку, спал в течение X секунд, а затем повторилпроцесс.Но я хочу, чтобы он запускал и останавливал tcpdump между каждым пингом.Я думал, что код ниже будет работать, но он выпадает из цикла после одного пинга?

Есть идеи, почему это так?

#!/bin/bash

#start a process in the background (it happens to be a TCP HTTP sniffer on  the loopback interface, for my apache server):

for i in {1...4}
do
        tcpdump host 8.8.8.8  -ttt &
        sleep 1
        ping -I eth0 8.8.8.8 -c 1

        #.....other commands that send packets to tcpdump.....
        sleep 1
        pkill tcpdump
done

1 Ответ

0 голосов
/ 05 июня 2018

Проблема связана с вашим диапазоном - у вас есть дополнительный период там.Итак, вы просто зациклились один раз со строкой {1...4} вместо 1 2 3 4.

Вы можете написать свой код как:

#!/bin/bash
for i in {1..4}
do
  tcpdump host 8.8.8.8 -ttt &
  sleep 1
  ping -I eth0 8.8.8.8 -c 1
  sleep 1
  kill "$!"                      # kill the background process
done
...