Как сделать так, чтобы tcpdump записывал в файл каждый перехваченный пакет?

13552
sudurais

Я использую следующую версию tcpdump:

  • tcpdump версия 4.0.0
  • libpcap версия 1.0.0

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

tcpdump -i em1 -w /tmp/pkts.pcap -s 1500 

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

3
Вы, вероятно, могли бы немедленно записать его в файл, но в лучшем случае это так: если вы открыли файл, когда `tcpdump` еще работал, вы не увидите результаты, которые были записаны в файл после его открытия (закрытие и открыть файл позволит вам увидеть более свежие результаты). В худшем случае tcpdump берет на себя полный контроль над файлом и не дает вам доступа к его чтению, пока tcpdump не завершит работу. Если вы не можете жить ни с одним из этих сценариев, то вам может понадобиться другое (более надежное) решение, например, [Wireshark] (http://www.wireshark.org/). ubiquibacon 13 лет назад 0
@typoking: спасибо. Wireshark был бы лучшим способом .. Так что, нет способа настроить tcpdump. есть опция -U, но она не работает в 4.0.0, я полагаю .. sudurais 13 лет назад 0
Вы можете попробовать использовать команду tail в отдельном сеансе для просмотра растущего файла журнала: например: tail -f logfilename Linker3000 13 лет назад 0
«есть опция -U, но она не работает в 4.0.0, я полагаю». Итак, я полагаю, что вы попробовали, и она не сделала то, что вы ожидали? (Если вы * не * попробовали это, попробуйте это прежде, чем предположить, что это не работает.) 10 лет назад 0

1 ответ на вопрос

5
agtoever

Используйте -Uопцию в сочетании с -wопцией и проверьте, есть ли у вас версия libcap, которая поддерживает pcap_dump_flush(). Со страницы руководства (версия 4.3.0-1):

 -U If the -w option is not specified, make the printed packet output ``packet- buffered''; i.e., as the description of the contents of each packet is printed, it will be written to the standard output, rather than, when not writing to a terminal, being written only when the output buffer fills.  If the -w option is specified, make the saved raw packet output ``packet-buffered''; i.e., as each packet is saved, it will be written to the output file, rather than being written only when the output buffer fills.  The -U flag will not be supported if tcpdump was built with an older version of libpcap that lacks the pcap_dump_flush() function. 
`pcap_dump_flush ()` была введена в libpcap 0.8, а флаг `-U` был введен в tcpdump 3.8, поэтому libpcap 1.0.0 / tcpdump 4.0.0 поддерживают их. 10 лет назад 1