100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > linux pcap文件格式 pcap文件格式

linux pcap文件格式 pcap文件格式

时间:2020-08-27 22:42:01

相关推荐

linux pcap文件格式 pcap文件格式

Libpcap已经成为Linux,Unix平台上网络数据捕获的一个事实上的标准。所以,掌握Libpcap文件的格式也非常重要。这里用version2.4来说明(实际上,这个文件格式自从Libpcap的0.4版本,既是1998年来就没有改变过)。Libpcap文件用.pcap作为后缀。

从上图可以看出来,每个Libpcap文件都有一个全局的头(Global

header),然后跟着是N(N>=0)个数据包组成的。每个数据包又分为包头(Packet

Header)和包数据(Packet Data)部分。

1.Global Header

typedef struct pcap_hdr_s {

guint32 magic_number;

guint16 version_major;

guint16 version_minor;

gint32 thiszone;

guint32 sigfigs;

guint32 snaplen;

guint32 network; } pcap_hdr_t;

这是Global Header的格式。

magic_number:用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照原来的顺序读取,0xd4c3b2a1表示下面的字节都要交换顺序读取。一般,我们使用0xa1b2c3d4

version_major, version_minor:Libpcap的版本

thiszone:

时区。GMT和本地时间的相差,用秒来表示。如果本地的时区是GMT,那么这个值就设置为0.这个值一般也设置为0

sigfigs:精确的time stamps,实际上都设置为0

snaplen:该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535;

例如:想获取数据包的前64字节,可将该值设置为64。

network:数据链路层类型。1是Ethernet,所以一般设置为1。

2.Packet Header

每个数据包都以一个Packet Header开始,下面是其结构:

typedef struct pcaprec_hdr_s {

guint32 ts_sec;

guint32 ts_usec;

guint32 incl_len;

guint32 orig_len; } pcaprec_hdr_t;

ts-sec:该数据包被捕获的时间(date and time),值是自从January 1,

1970 00:00:00 GMT以来的秒数来记。也就是linux

time_t

ts_usec:数据包被捕获时候的微秒(microseconds)数,是自ts-sec的偏移量。

incl_len:数据包实际抓获并且保存在文件中的长度(用bytes计算)。这个值不能大于orig_len和snaplen

orig_len:数据包被捕获是,在网络上出现的长度(用bytes计算)。如果incl_len与orig_len不同,则说明实际抓包的大小被snaplen所限制。

例如,实际上有一个包长度是1500 bytes(orig_len=1500),但是因为在Global

Header的snaplen=1300有限制,所以只能抓取这个包的前1300个字节,这个时候,incl_len

= 1300

3.Packet Data

Packet Data紧跟着Packet Header,长度是incl_len,没有格式

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。