还是先给出一个例子叭。

第一行给出的是物理层信息, 物理层为设备之间的数据通信提供传输媒体及互连设备,总结来说就是 “ 信号和介质 ”。

从图中可以看出该层所提供的信息包括两类:

(1)一类没有中括号,表示从pcap数据报文本身提取的一些信息。

(2)另外一类带有中括号,表示根据报文整体的分析所给出的辅助性信息,pcap本身并不含有这些字段信息。。

java wireshark close wait问题 wireshark frame contains_Time

 

 

 

 

 

1 Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592bits)   1号帧,线路74字节,实际捕获592bits
 2 Encapsulation type: Ethernet (1) #封装类型,表示以太网的链路
 3 Arrival Time:  捕获日期和时间(中国标准时间)
 4 [Time shift for this packet: 0.000000000 seconds]
 5 Epoch Time: 绝对时间秒数(和前一种是不同的表达方式)
 6 [Time delta from previous captured frame: xx seconds]    此包与前一包时间间隔
 7 [Time delta from previous displayed frame: xx seconds]
 8 [Time since reference or first frame: xx seconds]    此包与第一个帧的时间间隔
 9 Frame Number: 1   帧序号
10 Frame Length: 74 bytes (592 bits)    帧长度,数据的长度,是根据协议这种类格式中length所得到的长度,和后面的Capture Length长度是不同的。
11 Capture Length: 74 bytes (592 bits)    在网卡上实际捕获的数据帧长度。通常情况下Frame Length和Capture Length 是相同的,但是如果Capture Length所捕获的数据有缺失,则Capture Length要比Frame Length要小一些。
12 [Frame is marked: False]     此帧是否做了标记:否
13 [Frame is ignored: False]
14 [Protocols in frame: eth:ethertype:ip:tcp]   帧内封装的协议层次结构
15 [Coloring Rule Name: HTTP]   用不同颜色的染色标记的协议名称:HTTP
16 [Coloring Rule String: http || tcp.port == 80 || http2]    染色显示规则字符串

上述frame层中这些没有中括号的信息都是从pcap报文中获取,但是又不是协议所提供的,这些信息不属于网络传输过程中传输协议数据或者传输内容数据的一部分,属于的是诸如winpcap 以及libpcap 这种用于抓取网络数据的库,在抓取数据时候将每一片的报文添加的一些头部信息中的内容,因此有必要简单介绍一些pcap文件的构成,如下图所示。

java wireshark close wait问题 wireshark frame contains_Time_02

 

在wireshark的官网给出了pcap文件的存储格式。一个总的头部信息Global Header,以及每一片报文会有其对应的头部信息Packet Header,这些信息都是在形成pcap报文的过程中写入的,而Packet Data则表示抓取网络通信中的实际数据内容。分别解释一下Global Header以及Packet Header中个字段的含义。

1 # global header
 2 typedef struct pcap_hdr_s {
 3         guint32 magic_number;   /* magic number */
 4         guint16 version_major;  /* major version number */
 5         guint16 version_minor;  /* minor version number */
 6         gint32  thiszone;       /* GMT to local correction */
 7         guint32 sigfigs;        /* accuracy of timestamps */
 8         guint32 snaplen;        /* max length of captured packets, in octets */
 9         guint32 network;        /* data link type */
10 } pcap_hdr_t;
1 # packet header
2 typedef struct pcaprec_hdr_s {
3         guint32 ts_sec;         /* timestamp seconds */
4         guint32 ts_usec;        /* timestamp microseconds */
5         guint32 incl_len;       /* number of octets of packet saved in file */
6         guint32 orig_len;       /* actual length of packet */
7 } pcaprec_hdr_t;

 

很神奇的使用sublime打开pcap包,就可以看到它的十六进制格式啦!

java wireshark close wait问题 wireshark frame contains_Time_03

 

 

 

 

 

1. Global Header中magic_number 为文件开始表示,一般为0xd4c3b2a1,同时头部字节需要交换读取顺序,如上述码流所示。

2.version_major和version_minor一共4个字节表示大小版本号,即pcap格式版本,当前版本为2.4。

3.thiszone为4个字节的区域时间信息,默认为GMT,其值为0。

4.sigfigs为4个字节的精确时间戳,通常默认为0。

5.snaplen为4个字节的包最大长度描述的是允许抓取的每一片报文的最大长度,一般默认 ffff 0000 ,65535个字节即可以表示通常报文的最大长度,图这里面设置为 0400 0000(头部字节需要交换读取顺序)表示一个比较大的字节大小,如果想限制抓取每一片报文的长度,则可以设置。

6.network为4个字节的链路类型,就是反应在frame 层中的Encapsulation type Ethemet(1)其值为1。

 

1.每一片Packet Header中包括ts_sec和ts_usec共8 个字节的时间信息,体现在Frame 中主要是每一片报文的捕获时间,为 31bc 5f59 23ba 0b00,转换后的时间为最开始给出的图片中的arrival time。

2.incl_len为4 个字节的捕获长度信息,以及orig_len为4个字节的实际长度信息,均为4a00 0000,转换为主机字节序表74个字节长度。至于incl_len和orig_len的区别,在前面介绍frame层信息的时候已经阐述。

 

虽然frame不是网络协议的一部分,但是wireshark能够像各个协议一样为frame层提供了显示过滤器,可以用于筛选报文。

【sublime中后续字节表示的信息,可以查看上一篇!】