我想读取一个pcap文件并获取流的数据包的 header 信息...
为此,我从http://www.cnblogs.com/xiangshancuizhu/archive/2012/10/14/2723654.html找到了一个c++程序,该程序读取pcap文件并具有 header 指针,该指针
类只是指向标题的长度,但是我想访问标题的其他功能
例如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) */
};
我希望这个结构有更多的成员,我该怎么办?
非常感谢。
最佳答案
您无法将更多字段添加到pcap_pkthdr-libpcap不会对这些字段执行任何操作。数据包数据字段(例如链路层,IP和TCP报头)不是该报头的功能。
数据包数据由data
变量指向。那就是链接层头,IP头位于IP数据包中,TCP头位于TCP数据包中的地方等等。参见例如Tim Carstens' tutorial on how to use libpcap。
您可能需要考虑使用libcrafter构建程序,它是“C++的高级库,旨在简化网络数据包的创建和解码”。您可能对“制作”部分不感兴趣,但对“解码”部分感兴趣。
关于c++ - 在C++中读取pcap文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21147110/