2013-04-19 9 views
4

Я хочу, чтобы запустить программу TCP и захватить соответствующие пакеты, мой сценарий оболочки cap.sh, как показано ниже:ТСРйитр внутри сценария оболочки не захватывает ничего

sudo tcpdump -i eth0 -w mypcap & 
    sleep 3 
    ./tcp_receiver 
    sleep 2 
    x=`ps -ef|grep "tcpdump"|grep -v "grep"|awk '{print $2}'` 
    sudo kill -9 $x 

Я бегу cap.sh

sudo ./cap.sh 

так на самом деле в этой оболочке я могу запустить sudo без пароля , а хост просто виртуальный фрагмент на удаленной машине (узел PLanetlab) , хотя я вижу процесс tcpdump от ps -ef не захватит ничего я вижу, файл mypcap составляет 0 байт после cap.sh отделок

каковы потенциальные причины? и как заставить tcpdump в сценарии оболочки захватить пакеты? спасибо!

ответ

4

Не использовать kill -9. Мало того, что это почти всегда неправильно, это может вызвать проблему здесь, поскольку буферизованные данные будут отброшены, а не записаны на диск. Используйте обычное старое убийство, или kill -2.

Другим вариантом является добавление опции -U для сброса выходного буфера после каждого пакета.

+1

Поиск ПИД-кода с помощью grepping списка процессов также является плохой идеей. Если есть другой экземпляр tcpdump, вы также убьете этот процесс. Вместо этого сохраните PID после запуска tcpdump, используя этот ответ: http://stackoverflow.com/a/1911387/138329. – bradreaves

0

Одна потенциальная причина: eth0 не существует в виртуализованной среде.

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