Возможности библиотеки 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, насколько я могу сказать.