Возможности библиотеки PCAP (написание новых файлов PCAP)

Я застрял.

Я использовал PCAP.NET для чтения файлов.PCAP и записи пакетов в базу данных. Теперь я могу запросить базу данных и получить обратно пакеты, которые соответствуют ограничениям. Мне нужен способ записать результаты в новый файл.PCAP.

Проблема в том, что, насколько я могу судить, единственный способ создать новый файл PCAP - это DumpFile, который может быть инициализирован только через PacketCommunicator, который сам привязан к PacketDevice.

пример можно увидеть здесь: http://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Handling%20offline%20dump%20files&referringTitle=Pcap.Net%20User%20Guide

Ну и хорошо, но в этом случае у меня нет устройства.

Должен ли я свернуть свой собственный писатель PCAP только для этой цели?

Я что-то упустил очевидное?

Как я могу получить эти пакеты в новый файл PCAP?

Я убежден, что я упустил что-то простое... PCAP - это новая территория для меня, и я чувствую себя очень не в своей тарелке. Работники Unix указывают, что libpcap, на котором основан winpcap и, следовательно, pcap.net, предоставляет возможность записи непосредственно в файл pcap. Функциональность не выставлена ​​в библиотеке?

Рекомендации очень ценятся.

Спасибо,

Крис

PS Это ревизия моего первоначального вопроса, заданного здесь: .NET написание файлов PCAP

1 ответ

В в Pcap.Net руководство пользователя, то страница "Обращение в автономном режиме файлов дамп" имеет пример использованияPacketDumpFileкласс для записи файла дампа. Я не вижу никакого справочного руководства по Pcap.Net; чтобы ответить на этот вопрос, пользователь прочитал исходный код Pcap.Net.

Вы можете создать заголовок pcap и формат, спецификация проста, и вам не нужна внешняя библиотека, кроме pcap.h.

struct pcap_file_header {
    bpf_u_int32 magic;
    u_short version_major;
    u_short version_minor;
    bpf_int32 thiszone;     /* gmt to local correction */
    bpf_u_int32 sigfigs;    /* accuracy of timestamps */
    bpf_u_int32 snaplen;    /* max length saved portion of each pkt */
    bpf_u_int32 linktype;   /* data link type (LINKTYPE_*) */
};

Итак, ваш файл сначала создаст заголовок для файла pcap, например:

    struct pcap_file_header pheader;

    pheader.magic = 0xA1B2C3D4; // MAGIC NUMBER FOR TCPDUMP
    pheader.version_major = PCAP_VERSION_MAJOR;
    pheader.version_minor = PCAP_VERSION_MINOR;
    pheader.thiszone = 0;
    pheader.sigfigs = 0;
    pheader.snaplen = 1500;
    pheader.linktype = 1;

И для записи каждого пакета вам нужна структура вроде:

typedef struct {
    int32_t t0;
    int32_t t1;
    int32_t len;
    int32_t caplen;
} pcap_header_writeable;

Итак, вы напишете в файле так:

    pcap_header_writeable header;

    header.t0 = 0;
    header.t1 = 0;
    header.len = length;
    header.caplen = length;

    // write the header on the file 
    // write the packet on the file after the header

Функциональность не выставлена ​​в библиотеке?

Какая библиотека?

Он выставлен в libpcap/WinPcap, но открыть файл для вывода немного неудобно - вам нужен pcap_t для устройства захвата, pcap_t для файла захвата или манекена pcap_t для типа заголовка канального уровня и длины снимка файла, который вы пишете, если пакеты, которые вы пишете, не поступают из оперативного захвата или существующего файла захвата.

Я не смог найти справочную документацию для Pcap.NET, просто учебную документацию, но, похоже, не было ничего, что позволяло бы открыть фиктивную ручку - вы можете открыть устройство захвата или автономный файл захвата, но я этого не сделал. Я не вижу ничего о создании фиктивного дескриптора, из которого вы не можете читать пакеты, но который вы можете использовать при открытии файла захвата для записи - так что все функции, доступные в libpcap/WinPcap, НЕ представлены в Pcap.NET, насколько я могу сказать.

Другие вопросы по тегам