2012-04-11 4 views
4

Мне нужно сохранить UDP-пакеты в файл и использовать формат pcap для повторного использования различных доступных инструментов (wireshark, tcpdump, ...). Есть некоторая информация в this thread, но я не могу найти, как написать глобальный заголовок файла 'struct pcap_file_header'.Создание файла pcap

pcap_t* pd = pcap_open_dead(DLT_RAW, 65535); 
pcap_dumper_t* pdumper = pcap_dump_open(pd, filename); 

struct pcap_file_header file_hdr; 
file_hdr.magic_number = 0xa1b2c3d4; 
file_hdr.version_major = 2; 
file_hdr.version_minor = 4; 
file_hdr.thiszone = 0; 
file_hdr.sigfigs = 0; 
file_hdr.snaplen = 65535; 
file_hdr.linktype = 1; 

// How do I write file_hdr to m_pdumper? 

while((len = recvmsg(sd, &msg_hdr, 0)) > 0) 
    pcap_dump((u_char*)m_pdumper, &m_pcap_pkthdr, (const u_char*)&data); 

Как написать глобальный заголовок файла? Если нет конкретной функции pcap, как я могу получить файловый дескриптор для вставки заголовка с помощью write()?

ответ

3

Вам не нужно писать этот заголовок, pcap_open_dead должен сделать это за вас. Вам нужно только заполнить и написать этот заголовок самостоятельно, если вы хотите записать файл напрямую, а не использовать pcap_dump и друзей. Пример here тривиальной программы выписывает файл pcap с этими функциями.


оригинальный ответ, касающиеся записи файла непосредственно:

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

Вы можете найти его прикрепленным к this debian bug. (Ошибка ссылка исправлена.)

Некоторые из них для подделки локальных сетей и заголовков IP, и не может быть применимы, как вы используете pcap_dump_open и pcap_dump где, как патч связан выше выписывает файл pcap без использования каких-либо библиотек , но я оставлю это здесь в любом случае, если это поможет.

+0

Спасибо, но похоже, что вы все сделали, используя обычные вызовы write(). Я использую pcap_dump() и не могу понять, где получить дескриптор файла. –

+0

@RobertKubrick Обновлено выше. Я оставил исходный ответ, так как даже с помощью 'pcap_dump' вам все равно нужно подделать заголовок IP, и связанный с ним патч может помочь в этом. – je4d

+0

Правда, не нужно писать глобальный заголовок файла, я только что проверил. –

Смежные вопросы