使用wireshark这款软件来分析UDP包,UDP报文为了方便读者复现,直接使用官网提供的包文件说明

准备UDP分析报文

从wireshark官网下载UDP分析包:tpncp_udp.pcap,使用wireshark打开tpncp_udp.pcap,这里我们选择第4个UDP报文,数据长度len=12,选择一个尽可能小一点的数据包,后面计算校验和字段减少些运算

wireshark的UDP包分析 用wireshark分析udp报文格式_UDP

分析UDP报文

点击/双击第4个UDP报文,可以看到运输层的协议使用UDP协议,UDP数据大小为12,IP网际层也需要使用到,运输层在首部字段校验和需要使用到伪首部信息,也就是IP网际层的信息

wireshark的UDP包分析 用wireshark分析udp报文格式_进制_02

1. 分析UDP的首部格式

贴一个UDP 的首部格式,方便对应

wireshark的UDP包分析 用wireshark分析udp报文格式_wireshark的UDP包分析_03


我们可以看出,字段分别对应(16进制)

  • 源端口:097c
  • 目的端口:0978
  • 长度:0014
  • 校验和:60e3

wireshark的UDP包分析 用wireshark分析udp报文格式_UDP_04

2. 校验UDP的首部格式值来源

长度:0014,10进制为20字节

wireshark的UDP包分析 用wireshark分析udp报文格式_进制_05

从UDP 用户数据报计算得出,UDP 用户数据报长度 = UDP 首部 + UDP 用户数据报的数据部分,计算得出20字节,正确

wireshark的UDP包分析 用wireshark分析udp报文格式_数据_06


从IP数据报计算得出,UDP 用户数据报长度 = IP数据报长度 - IP首部长度,计算得出20字节,正确

wireshark的UDP包分析 用wireshark分析udp报文格式_进制_07


校验和:60e3,二进制为0110 0000 1110 0011

计算方法可以参考上一篇博客:校验和字段计算需要使用到伪首部

wireshark的UDP包分析 用wireshark分析udp报文格式_进制_08


伪首部字段对应

wireshark的UDP包分析 用wireshark分析udp报文格式_UDP_09


计算,将数据每16位为一组

二进制

含义说明

报文中信息

00001010 00000100

源IP地址

10.4(10进制)

00000010 00101100

2.44(10进制)

00001010 00000100

目的IP地址

10.4(10进制)

01100000 01100100

96.100 (10进制)

00000000 00010001

全0 IP数据报文协议字段

0.17(10进制)

00000000 00010100

长度

20 (10进制)

00001001 01111100

源端口

2428(10进制)

00001001 01111000

目的端口

2424(10进制)

00000000 00010100

长度

20 (10进制)

00000000 00000000

校验和置为0

00010101 00011001

数据

09(16进制)

00000000 00001000

数据

7c(16进制)

00000000 00000010

数据

09(16进制)

00000000 00000000

数据

78(16进制)

00000000 00000000

数据

00(16进制)

00000000 00110100

数据(共12字节)

14(16进制)

校验和详细计算过程

0000101000000100
	0000001000101100
  +	----------------
  =	0000110000110000
------------------------
	0000110000110000
	0000101000000100
  +	----------------
  =	0001011000110100
------------------------
	0001011000110100
	0110000001100100
  +	----------------
  =	0111011010011000
------------------------
	0111011010011000
	0000000000010001
  +	----------------
  =	0111011010101001
------------------------
	0111011010101001
	0000000000010100
  +	----------------
  =	0111011010111101
------------------------
	0111011010111101
	0000100101111100
  +	----------------
  =	1000000000111001
------------------------
	1000000000111001
	0000100101111000
  +	----------------
  =	1000100110110001
------------------------
	1000100110110001
	0000000000010100
  +	----------------
  =	1000100111000101
------------------------
	1000100111000101
	0000000000000000
  +	----------------
  =	1000100111000101
------------------------
	1000100111000101
	0001010100011001
  +	----------------
  =	1001111011011110
------------------------
	1001111011011110
	0000000000001000
  +	----------------
  =	1001111011100110
------------------------
	1001111011100110
	0000000000000010
  +	----------------
  =	1001111011101000
------------------------
	1001111011101000
	0000000000000000
  +	----------------
  =	1001111011101000
------------------------
	1001111011101000
	0000000000000000
  +	----------------
  =	1001111011101000
------------------------
	1001111011101000
	0000000000110100
  +	----------------
  =	1001111100011100
------------------------

计算结果为1001111100011100

取反为0110000011100011,对应16进制6e03

wireshark的UDP包分析 用wireshark分析udp报文格式_wireshark的UDP包分析_10


将校验和6e03填写值该字段

wireshark的UDP包分析 用wireshark分析udp报文格式_数据_11

以上就是分析用户数据报UDP全过程