Есть ли способ считывать информацию о пакетах из канала FIFO в

#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:

Из man pcap_open_offline

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.