Я хочу отслеживать URL-адрес, который я посещаю, поэтому я использую командную строку, например:

tcpdump -ien1 -v -X 'tcp port 80' | sed -nl 's/^. 0x [0-9a-е] {4}:. {43}(.)$/\1/p '| perl break.pl | perl -pe' s/(GET | POST).(. ?).HTTP/1 ....Хост:.([A-zA-Z._0-9-])../"\nBEGURL" .localtime(). ": $ 1 http://$ 3 $ 2\n"/ge '| grep "^ BEGURL"

Работает нормально, по одному URL на строку. Но если я сделаю

tcpdump -ien1 -v -X 'tcp port 80' | sed -nl 's/^. 0x [0-9a-е] {4}:. {43}(.)$/\1/p '| perl break.pl | perl -pe' s/(GET | POST).(. ?).HTTP/1 ....Хост:.([A-zA-Z._0-9-])../"\nBEGURL" .localtime(). ": $ 1 http://$ 3 $ 2\n"/ge '| grep "^ BEGURL" >> /tmp /out

(обратите внимание на конец >> /tmp /out) Тогда файл пуст! Ты знаешь почему? Это абсолютно нелогично для меня.

Я также попытался перенаправить stdout и stderr в /tmp /out, он все еще пуст. Файл имеет доступ для записи. Я понятия не имею, что это может быть. Есть ли что-нибудь еще, кроме stdout и stderr??

за любую помощь.

2 ответа2

0

Вы можете иметь в виду, что пытались это сделать, когда говорите «Я также пытался перенаправить stdout и stderr в /tmp /out», но это кажется наиболее вероятной проблемой: попробуйте добавить 2> & 1 в конец.

Если нет, то, чтобы помочь в отладке, попробуйте добавить 2>/dev/null в вашу первую команду и посмотреть, все ли еще вы получите результат.

Кроме того, вы можете упростить команду для тестирования? Например, это работает:

tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out
0

У меня была такая же проблема всего несколько дней назад. Попробуйте использовать опцию -w , чтобы записать пакеты в файл. Для получения дополнительной информации смотрите man tcpdump .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .