заголовок — чтение файла pcap в Stack Overflow

Я хочу прочитать файл pcap и получить информацию заголовка пакетов потока …

для этого я нашел программу на C ++ из http://www.cnblogs.com/xiangshancuizhu/archive/2012/10/14/2723654.html который читает файл pcap и имеет указатель заголовка, этот указатель

класс просто указывает на длину заголовка, но я хочу получить доступ к другим функциям заголовка

например, syn, fin, ack, seq no, …. вот мой код, как я могу это сделать?

 char errbuff[PCAP_ERRBUF_SIZE];

/*
* Step 4 - Open the file and store result in pointer to pcap_t
*/

// Use pcap_open_offline
// http://www.winpcap.org/docs/docs_41b5/html/group__wpcapfunc.html#g91078168a13de8848df2b7b83d1f5b69
pcap_t * pcap = pcap_open_offline(file.c_str(), errbuff);

/*
* Step 5 - Create a header and a data object
*/

// Create a header object:
// http://www.winpcap.org/docs/docs_40_2/html/structpcap__pkthdr.html
struct pcap_pkthdr *header;

// Create a character array using a u_char
// u_char is defined here:
// C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\WinSock2.h
// typedef unsigned char   u_char;
const u_char *data;

/*
* Step 6 - Loop through packets and print them to screen
*/
u_int packetCount = 0;
while (int returnValue = pcap_next_ex(pcap, &header, &data) >= 0)
{
// Print using printf. See printf reference:
// http://www.cplusplus.com/reference/clibrary/cstdio/printf/

// Show the packet number
printf("Packet # %i\n", ++packetCount);

// Show the size in bytes of the packet
printf("Packet size: %d bytes\n", header->len);

а header это структура типа:

struct pcap_pkthdr {
struct timeval ts;  /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len;    /* length this packet (off wire) */
};

и я хочу, чтобы в этой структуре было больше членов, что мне делать?
большое спасибо.

2

Решение

Вы не можете добавить больше полей в pcap_pkthdr — libpcap ничего не будет делать с этими полями. Пакет данные поля, такие как заголовок канального уровня, IP и TCP, НЕ особенности этого заголовка.

На пакетные данные указывает data переменная. Это где заголовок канального уровня, где IP-заголовок в IP-пакетах, TCP-заголовок в TCP-пакетах и ​​т. д. Смотрите, например, Учебник Тима Карстенса о том, как использовать libpcap.

Возможно, вы захотите посмотреть на создание вашей программы с помощью libcrafter, это «библиотека высокого уровня для C ++, предназначенная для облегчения создания и декодирования сетевых пакетов». Возможно, вас не интересует часть «крафта», но вам может быть интересна часть «расшифровки».

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]