理解pcap包头
有人能解释一下pcap数据包头在C中是如何使用的吗? 我找不到任何关于它是如何构造和使用的清晰解释 事实上,我不明白我们如何使用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
\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) */
};