2015-04-02 5 views
0

Я хочу, чтобы выполнить что-то вроде этого:передачи в качестве выходного параметра TCPDUMP

sudo tcpdump -n dst port 40010 -X 

передать каждый пакет получила Баш файл read.sh

и Еогеасп полученного пакета выполнить read.sh

Это как

sudo bash read.sh -y (tcpdump -n dst port 40010 -X) 

Или

tcpdump -n dst port 40010 -X > read.sh 

ответ

0

Общий способ передачи вывода от одной команды к другой - это конвейер.

tcpdump | script 

Тем не менее, это приведет к script получить непрерывный поток продукции, по одной строке за один раз. Выходной сигнал от tcpdump разбивает один пакет на несколько строк, поэтому, если script предполагает, что он получит один пакет, вам нужно будет каким-то образом проанализировать вывод.

На основе краткого экспериментирования, что-то вроде должно работать:

tcpdump -n dst port 40010 -X | 
awk '/^[0-9]/ && $2 != "packets" { 
     if (p) { print p | "script"; close("script"); } p=$0 } 
    /^[ \t]/ { p=p "\n" $0 } 
    END { if(p) print p | "script" }' 

Дополнительная причуда, что нажатие Ctrl-C прервет весь трубопровод, так что вы потеряете последние несколько пакетов полностью. Я избегал этого, указав несколько пакетов с -c, но вы также можете защитить сценарий Awk, запустив его с помощью trap для блокировки сигналов. Однако на данный момент я, возможно, подумал бы о переходе на Python или что-то в этом роде. Разумеется, включение пакета в script также поможет.

+0

команда останавливается на 20-24 пакетах ... Где хранится пакет в «скрипте»? – Ratiess

+0

Он считывается со стандартного ввода, по одному пакету за раз. То, что происходит внутри 'script', зависит от вас, действительно. – tripleee

+0

он работает, спасибо большое! – Ratiess

Смежные вопросы