Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解pcap包头_C_Networking_Pcap - Fatal编程技术网

理解pcap包头

理解pcap包头,c,networking,pcap,C,Networking,Pcap,有人能解释一下pcap数据包头在C中是如何使用的吗? 我找不到任何关于它是如何构造和使用的清晰解释 事实上,我不明白我们如何使用pcap库\include 事实上,我需要使用 struct pcap\u pkthdr*header但我不知道如何使用它 谢谢,Pcap为每个数据包定义了一个报头。与pcap文件头一起,数据包头将使您能够理解pcap转储中的数据 struct pcap_file_header { bpf_u_int32 magic; u_short v

有人能解释一下pcap数据包头在C中是如何使用的吗? 我找不到任何关于它是如何构造和使用的清晰解释

事实上,我不明白我们如何使用pcap库
\include

事实上,我需要使用
struct pcap\u pkthdr*header
但我不知道如何使用它


谢谢,Pcap为每个数据包定义了一个报头。与pcap文件头一起,数据包头将使您能够理解pcap转储中的数据

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_*) */
};

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) */
};
因此,首先您将获得文件头,然后是所有捕获的数据包。
在C语言中,您可以读取pcap转储的24个字节,然后将这些字节映射到pcap文件头结构。在此之后,您可以开始读取所有不同的数据包。请注意,pcap有不同的版本,我在这里写的内容并不适用于每个pcap转储。

pcap为每个数据包定义了一个头。与pcap文件头一起,数据包头将使您能够理解pcap转储中的数据

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_*) */
};

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) */
};
因此,首先您将获得文件头,然后是所有捕获的数据包。 在C语言中,您可以读取pcap转储的24个字节,然后将这些字节映射到pcap文件头结构。在此之后,您可以开始读取所有不同的数据包。请注意,pcap有不同的版本,我在这里写的内容并不适用于每个pcap转储

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_*) */
};

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) */
};