用c ++读取pcap文件

时间:2014-01-15 20:04:44

标签: c++ header pcap

我想读取一个pcap文件并获取流的数据包的头信息......

为此,我从http://www.cnblogs.com/xiangshancuizhu/archive/2012/10/14/2723654.html找到了一个c ++程序,它读取了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);

和标题是一个结构:

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 个答案:

答案 0 :(得分:3)

您无法向pcap_pkthdr添加更多字段 - libpcap不会对这些字段执行任何操作。 Packet data 字段(例如链路层,IP和TCP标头)是该标头的 NOT 功能。

data变量指向分组数据。 那是,其中链路层标头是,其中IP报头在IP数据包中,其中TCP报头在TCP数据包中,依此类推。例如,请参阅Tim Carstens' tutorial on how to use libpcap

您可能希望使用libcrafter来构建程序,这是“C ++的高级库,旨在简化网络数据包的创建和解码”。您可能对“制作”部分不感兴趣,但会对“解码”部分感兴趣。

答案 1 :(得分:0)

如果您想读取一个pcap文件(不使用任何外部库来读取pcap文件),则需要按照类似这样的格式来解析该文件

GLOBAL_HEADER | PACKET_HEADER | PACKET_DATA | PACKET_HEADER | PACKET_DATA | ....

读取全局标头,然后,循环分析数据,直到文件结束。 您必须知道正确的格式,并且您的结构必须正确

为此,您可以点击此链接 https://www.tcpdump.org/pcap.html **链接中未提及UDP标头