#c #pipe #fifo #libpcap
Вопрос:
Я пробовал использовать что-то вроде
Fifo = open(<file path to my fifo>, "r");
pcap = pcap_fopen_offline(Fifo, errbuf);
Но я получил:
«неизвестный формат файла» в качестве ошибки в моем errbuf и pcap_fopen_offline возвращает значение NULL. Кто-нибудь знает, как это обойти, или есть другой способ заставить libpcap работать с libpcap?
Комментарии:
1. pcap предназначен для сетевых интерфейсов, а не для каналов.
2. В трубе нет пакетов.
3. Что вы ожидаете, что он захватит? Канал-это просто поток байтов, в нем нет заголовков или пакетов. Может быть, вы имели в виду использовать сокет Unix-домена?
4. Но я тоже не думаю, что pcap работает с ними. Видишь superuser.com/questions/484671/…
5. @Barmar В настоящее время у меня есть канал FIFO, который обычно читается wireshark (вроде как эта вики. wireshark.org/CaptureSetup/Pipes ), поэтому он содержит пакетные данные в байтах. В настоящее время я пытаюсь написать программу, которая вместо этого считывает данные из этого канала, чтобы я мог анализировать данные по-своему. Я подумал, что libpcap — это способ сделать это.
Ответ №1:
pcap_open_offline() вызывается для открытия «файла сохранения» для чтения.
fname указывает имя файла, который нужно открыть. Файл имеет тот же формат, что и формат, используемый tcpdump(1) и tcpslice(1).
В качестве альтернативы вы можете вызвать pcap_fopen_offline() для чтения сброшенных данных из существующего открытого потока fp. Обратите внимание, что в Windows этот поток следует открывать в двоичном режиме.
Используете ли вы tcpdump
данные? Вы находитесь в Windows (режим должен быть тогда «rb»)?
p.s. у вас опечатка, не должно ли это быть fopen
вместо open
?
Комментарии:
1. Да, извините, я исправлю опечатку. В настоящее время у меня есть канал FIFO, который обычно считывается wireshark, поэтому он содержит пакетные данные в байтах. В настоящее время я пытаюсь написать программу, которая вместо этого считывает данные из этого канала, чтобы я мог анализировать данные по-своему.
2. Может ли это быть проблема pcap — pcapng?
3. «Может ли это быть проблема pcap — pcapng?» Только с более старыми версиями libpcap/WinPcap. Я написал небольшую программу , чтобы открыть FIFO , а затем получить
pcap_t *
для нееpcap_fopen_offline()
, а затем использоватьpcap_loop()
, и она работала независимо от того, писал ли яcat
файл pcap или pcapng в FIFO.