背景
网络数据流格式:
使用wireshark抓包工具,默认存取为pcap文件
Pcap文件格式:
文件头: 24B:Magic:4B 标示文件的开始 + Major:2B 当前文件主要的版本号 + Minor:2B+ThisZone:4B当地的标准时间+SigFigs:4B时间戳的精度+SnapLen:4B最大的存储长度+LinkType:4B链路类型
Packet包头(16B)和Packet数据组成
Timestamp:时间戳高位,精确到seconds
Timestamp:时间戳低位,精确到microseconds
Caplen:当前数据区的长度,即抓取到的数据帧的长度,由此可以得到下一个数据帧的位置
Len:离线数据长度:网络中实际数据帧的长度,多数情况下和Caplen数值相等。
Packet数据:即Packet(通常就是链路层的数据帧去掉前面用于同步和标识帧开始的额8字节和最后用于CRC校验的4字节)具体内容,长度就是Caplen。注意:Pcap文件里面没有规定捕获的Packet数据包之间有什么间隔字符串,所以需要靠第一个Packet包确定下一组数据在文件中的起始位置。
数据内容从DLC(数据链路控制层)头开始,然后ip报头,传输层报头(TCP/UDP/ICMP/IGMP),最后是传输层数据部分
每个数据包的前14字节是以太帧头,即链路层的数据帧头,后面才是ip首部等内容。
以太网帧格式:
前序(8byte)+目标地址(6byte)+源地址(6byte)+类型(2byte)+有效负载(46~1500)+帧检验(4byte)
最小帧长度64字节,不包含8byte的前序
(1)只有文件头: size-pos<24
(2) 文件头+部分数据包 size-pos<42
(3)部分数据包 size-pos<53
(4) 刚好完整 if() return pos
方法:在readline