目录
- OSI七层模型
- 数据包逐层封装头部
- 抓包分析
- 数据包概况
- 数据链路层抓包
- 网络层抓包(IP协议抓包)
- UDP抓包
- 数据负载抓包
- Linux cooked-mode capture
OSI七层模型
OSI模型(OSI model),开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI)。
抓包通常抓取数据链路层、网络层、传输层的包。
数据包逐层封装头部
OSI主要关注5层,数据从上至下逐级封装,加入每层的头部信息,在物理层转换为比特率发送;
接收端使用逆向顺序把数据逐级解封装,发送给应用层。
抓包分析
linux下使用tcpdump抓包,抓取指定网卡,端口为50005 的包,保存到123.pcap,抓包完成后使用wireshark打开分析。
sudo tcpdump -i ens33 port 50005 -w 123.pcap -vvvv
下面抓一个UDP包进行分析。
TCP抓包分析看这里:https://blog.csdn.net/weixin_40355471/article/details/131187114?spm=1001.2014.3001.5502
数据包概况
点击第二条记录,wireshark分析抓包的第一条信息,是整个包的信息概况:
数据链路层抓包
数据链路层头部共14个字节,前6字节是目的MAC地址,随后6字节是源MAC地址,最后2字节是以太网帧所携带的上层数据类型:
IPv4: 0x0800
ARP:0x0806
PPPoE:0x8864
802.1Q tag: 0x8100
IPV6: 0x86DD
MPLS Label:0x8847
通常第二条是数据链路层抓包,分别是目的MAC,源MAC,数据类型。
转换为16进制。
00 0c 29 59 de c5 00 0c 29 66 95 33 08 00
网络层抓包(IP协议抓包)
数据传输网络层使用IP协议。
IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。实现大规模、异构网络的互联互通;分割顶层网络应用和底层网络技术之间的耦合关系。IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。
IP数据包包头:20个字节。
第1个字节(45) ,前4位4表示的是IP协议的版本,即IPv4;后4位,IHL(Internet Header Length 报头长度),表示IP报文头部按32位字长(32位,4字节)计数的长度,也即报文头的长度等于IHL的值乘以4。
第2个字节 是区分服务。
第3,4个字节 是指首部和数据之和的长度,即 IP数据包包头和IP数据之和,不包括以太帧头部的字节
第5,6个字节 是一个数据报被分片后的标识,便于正确的重装原来的数据报。
第7,8个字节 分前3位为标志位和后13位为片偏移,其中标识位只有两位有意义。
第9个字节 表示的是数据报在网络中的寿命。
第10个字节 指出数据报携带的数据时使用的协议类型(01表示ICMP协议; 06表示TCP协议; 11表示UDP协议)。
第11,12个字节 表示首位检验和,对数据报的保留与丢弃进行判别。
第13,14,15,16个字节 表示发送者的IP地址(源IP)。
第17,18,19,20个字节 表示接收者的IP地址(目的IP)。
抓包分析:
导出16进制。
45 00 00 26 55 df 40 00 40 11 d3 20 c0 a8 48 32 c0 a8 48 44
UDP抓包
UDP,用户数据报协议(User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
udp头部格式比较简单。
源端口号:发送方端口号。
目标端口号:接收方端口号。
包长度:整个UDP数据报的长度 = 报头+载荷。
校验和:检测UDP数据(包含头部和数据部分)报在传输中是否有错,有错则丢弃。
导出16进制。
c3 55 b7 1f 00 12 69 ce
数据负载抓包
导出16进制,转换为十进制,对照ASCII 码表,就是hello back。
68 65 6c 6c 6f 20 62 61 63 6b
ASCII 码表:
Linux cooked-mode capture
Wireshark分析抓包时,数据链路层显示Linux cooked-mode capture,这是Linux上libpcap所使用的伪协议,因为不是所有的网卡接口都具有相同的链路层协议。抓包时不指定网卡会出现(tcpdump -i any)。
转换成16进制如下:
00 00 00 01 00 06 c4 70 ab fc 1b a9 00 00 08 00
前6字节代表上图中的前三项,随后6字节是源MAC地址,后面2字节全0未使用,最后2字节0800代表以太网帧所携带的上层数据类型。