2012-03-30 4 views
1

All,Использование ТСРйитр На Growing Log Files

Я пытаюсь отлаживать простой маршрутизатор, где все пакеты вдаваясь в него, и разослал по проводам регистрируются в TCPDUMP читаемом логфайл.

Прямо сейчас, я запускаю программу, останавливая ее, а затем используя tcpdump, чтобы посмотреть журнал пакетов.

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

В идеале я хотел бы запустить программу внутри gdb, а затем, когда пакеты recv'd/sent, см. Их всплывающие в потоке, заданном tcpdump.

Edit: Сейчас команда ТСРйитр я использую

$tcpdump -r out.log -e -vvv- x 
+1

Может быть, вы должны использовать [Wireshark] (http://en.wikipedia.org/wiki/Wireshark) вместо этого? – wallyk

+0

Нет Wireshark. Я зарегистрирован в удаленном терминале, и X-11 отключен. – themaestro

ответ

0

От manual page:

-r Read packets from file (which was created with the -w option). 
    Standard input is used if file is ``-''. 

так что вы можете трубы файл в tcpdump.

+0

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

+0

Думая дальше, возможно, есть способ получить хвост для непрерывной печати, несмотря на то, что в файлах pcap нет возвратов строк ?, Тогда вы можете запустить что-то вроде $ tail -f out.log | tcpdump [параметры]. Я не мог понять, как заставить хвост писать вещи без символов «\ n». – themaestro

+0

Еще проще - запишите свою программу в FIFO ('mkfifo (1)') и прочитайте свой 'tcpdump'. –

0

Редактировать: Не 100% shure, если я понимаю, что вы хотите, но tee подходит?

т.е:

Судо ТСРйитр '(УДП и ЦСИ порт 53)' -nnvvXSs 1514 -l | Тройник dump.log

-l Сделать стандартный вывод строку буферном


Если вы хотите, чтобы взломать в C, то sniffex.c код предположительно могут быть изменены, чтобы удовлетворить ваши потребности.

В качестве стартового изменения filter_exp в соответствии с вашими нуждами.

Количество пакетов устанавливается num_packets, жестко закодировано до 10, используемый в pcap_loop():

Int pcap_loop (pcap_t * р, Int cnt, pcap_handler обратного вызова, u_char * пользователя);
cnt Задает максимальное количество пакетов для обработки перед возвратом. Отрицательное значение вызывает подпрограмму pcap_loop навсегда, или до тех пор, пока не будет достигнута EOF или не произойдет ошибка. Cnt из 0 обрабатывает все пакеты до тех пор, пока не произойдет ошибка или EOF. *

argv[1] - устройство для использования.


По умолчанию выход обычно:

Packet number 2: 
     From: 123.123.123.123 
     To: 10.0.0.10 
    Protocol: TCP 
    Src port: 153 
    Dst port: 53 
    Payload (1440 bytes): 
00000 de 15 be 61 60 47 9a 14 92 b0 5b 7c fa 64 51 4b ...a`G....[|.dQK 
00016 b0 b5 c4 4c b0 c2 a8 a3 89 60 10 36 29 7e 10 0c ...L.....`.6)~.. 
00032 94 15 01 9a a5 29 26 0a a9 a4 82 70 9f 22 ac 90 .....)&....p.".. 
... 
+0

Не совсем то, что я собираюсь - в основном исполняемый файл, который у меня есть, будет выписывать пакеты в файл, вызывать его out.log, и я хочу, чтобы tcpdump читал этот файл, когда к нему добавлено больше пакетов. – themaestro

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

  • Нет связанных вопросов^_^