网络基础知识:UDP协议概述

admin 2022年4月10日00:00:13评论28 views字数 6888阅读22分57秒阅读模式

转自:计算机与网络安全

用户数据报协议(User Datagram Protocol,UDP)是一种传输层协议。在TCP/IP网络中,它与TCP协议一样用于处理数据包,是一种无连接的协议。


1、UDP协议作用


TCP协议在进行数据传输时,需要建立连接,并且每次传输的数据都需要进行确认。当不再进行传输数据时,还需要断开连接。这样做虽然安全,但是效率较低。而UDP协议正好避免了这些过程,它是一种没有复杂控制,提供面向无连接的通信服务协议。UDP协议具备以下特点:


没有各种连接:在传输数据前不需要建立连接,也避免了后续的断开连接。


不重新排序:对到达顺序混乱的数据包不进行重新排序。


没有确认:发送数据包无须等待对方确认。因此,使用UDP协议可以随时发送数据,但无法保证数据能否成功被目标主机接收。


2、UDP数据格式


相比TCP协议,UDP协议的报文结构相对简单。下面介绍UDP报文的数据格式。


(1)UDP报文格式


每个UDP报文分为UDP报头和UDP数据区两部分。报头由4个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。UDP报文格式如图1所示。

网络基础知识:UDP协议概述

图1  UDP报文格式


UDP报文中每个字段的含义如下:


源端口:这个字段占据UDP报文头的前16位,通常包含发送数据报的应用程序所使用的UDP端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为0。这样,接收端的应用程序就不能发送响应了。


目的端口:接收端计算机上UDP软件使用的端口,占据16位。


长度:该字段占据16位,表示UDP数据报长度,包含UDP报文头和UDP数据长度。因为UDP报文头长度是8个字节,所以这个值最小为8。


校验值:该字段占据16位,可以检验数据在传输过程中是否被损坏。


(2)分析UDP数据包


客户端与服务器建立连接后进行通信,除了使用TCP协议外,还可以使用UDP协议。netwox工具提供了相关模块,用于建立UDP服务器和UDP客户端,实现基于UDP协议的数据交互。


已知主机A的IP地址为192.168.59.132,主机B的IP地址为192.168.59.135。分别在这两个主机上建立UDP服务器和客户端,并进行连接,监听指定端口上的通信信息。具体步骤如下:


1)在主机A上建立UDP服务器,设置监听端口为80,执行命令如下:


root@daxueba:~# netwox 90 -P 80


执行命令后,没有任何输出信息,但是成功建立了UDP服务器端。


2)在主机B上建立UDP客户端,连接UDP服务器端80端口,执行命令如下:


root@daxueba:~# netwox 88 -i 192.168.59.135 -p 80


执行命令后,没有任何输出信息,但是成功连接到了UDP服务器端,这里可以输入通信内容。


3)与UDP服务器端进行通信,在客户端输入hi:


root@daxueba:~# netwox 88 -i 192.168.59.135 -p 80

hi


4)在服务端可以看到客户端发来的消息如下:


root@daxueba:~#  netwox 90 -P 80

hi


5)为了验证发送的消息使用的是UDP协议,可以通过抓包进行查看,如图2所示。从图中第1个数据包可以看到,是UDP客户端(源IP地址为192.168.59.132)向UDP服务器端(目的IP地址为192.168.59.135)发送的UDP数据包,使用的源端口为随机端口47203,目的端口为80(UDP服务器端监听的端口)。在User Datagram Protocol部分中显示了UDP数据包的详细信息。可以看到源端口、目的端口,以及包长度为11字节、校验值为0xf878等信息。

网络基础知识:UDP协议概述

图2  客户端发往服务器端的UDP包


6)当服务器向客户端发送消息时,使用的也是UDP协议。例如,在服务器端回复客户端,输入hello:


root@daxueba:~# netwox 90 -P 80

hi

hello


7)通过抓包验证使用的是UDP协议,如图3所示。从第14个数据包可以看到,源IP地址为192.168.59.135,目的IP地址为192.168.59.132,源端口为80,目的端口为随机端口47203。该数据包正好是UDP服务器回复客户端的UDP数据包。在User Datagram Protocol部分中可以看到详细信息。

网络基础知识:UDP协议概述

图3  UDP服务器回复客户端的UDP数据包


3、构造UDP包


(1)基于IPv4伪造UDP包


在发送UDP数据包时,为了避免被发现,可以基于IPv4伪造UDP包。它可以设置假的IP地址和假的端口等。伪造包需要使用netwox工具中编号为39的模块来实现。


基于IPv4伪造UDP包。


1)不使用选项,直接运行并查看基于IPv4的UDP包,执行命令如下:


root@daxueba:~# netwox 39


输出信息如下:


IP______________________________________________________________.

|version|   ihl |      tos      |            totlen

|___4___|___5___|____0x00=0____ |___________0x001C=28______

|              id                    |r|D|M|       offsetfrag

|_________0x5578=21880__________      |0|0|0|________0x0000=0____

|      ttl      |   protocol    |           checksum

|____0x00=0_____|____0x11=17____|____________0x5D1F_______

|                                  source

|________________________192.168.59.132_______________________

|                                destination

|____________________________    5.6.7.8_____________________

UDP___________________________________________________________

|          source port          |       destination port

|__________0x04D2=1234__________|___________0x0050=80_______

|            length             |           checksum

|___________0x0008=8____________|_________0xF281=62081_______


其中,IP部分为IPv4数据报文头信息,可以看到源IP地址为192.168.59.132,该地址为当前主机的IP地址。UDP部分为UDP数据报文头信息,在该信息中可以看到每个字段的默认值。


2)基于IPv4伪造UDP数据包,伪造源IP地址为192.168.59.160,源端口为443。向目标主机192.168.59.135的8080端口发送UDP数据包,执行命令如下:


root@daxueba:~# netwox 39 -l 192.168.59.160 -m 192.168.59.135 -o 443 -p 8080


输出信息如下:


IP______________________________________________________________.

|version|   ihl |      tos      |            totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28______

|              id                     |r|D|M|       offsetfrag

|_________ 0x76A7=30375_________|0|0|0|________0x0000=0______

|      ttl      |   protocol    |           checksum

|____0x00=0_____|____0x11=17____|____________ 0x4BB2_______

|                                  source

|________________________192.168.59.160_______________________

|                                destination

|________________________192.168.59.135_____________________

UDP___________________________________________________________

|          source port          |       destination port

|__________ 0x01BB=443__________|_________0x1F90=8080______

|            length             |           checksum

|___________0x0008=8____________|_________ 0xE61A=58906_______


在IP部分中可以看到,源IP地址变为了伪造的地址192.168.59.160。目的IP地址为目标主机的地址。在UDP部分可以看到,源端口为伪造的端口443,UDP数据包的长度为8,校验值为0xE61A。


3)通过抓包验证成功伪造了UDP数据包,如图4所示。从第6个数据包可以看到,源IP地址为192.168.59.160,目的IP地址为192.168.59.135,源端口为443,目的端口为8080。该数据包正是伪造的UDP数据包,在User Datagram Protocol部分中可以看到UDP数据报头字段信息,如长度为8、校验值为0xe61a等。

网络基础知识:UDP协议概述

图4  伪造IP地址的UDP包


(2)基于Ethernet和IPv4伪造UDP数据包


上述基于IPv4伪造UDP包只能伪造IP地址,但是不能伪造MAC地址。netwox工具提供编号为35的模块,它可以基于Ethernet和IPv4伪造UDP包,可以伪造MAC地址。


基于Ethernet和IPv4伪造UDP包。


1)不使用选项直接运行查看基于Ethernet和IPv4的UDP包,执行命令如下:


root@daxueba:~# netwox 35


输出信息如下:


Ethernet________________________________________________________.

| 00:0C:29:FD:DE:B8->00:08:09:0A:0B:0C type:0x0800

|_____________________________________________________________

IP______________________________________________________________.

|version|  ihl  |      tos      |            totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28______

|              id                     |r|D|M|       offsetfrag

|_________ 0x555E=21854_________|0|0|0|________0x0000=0______

|      ttl      |   protocol    |           checksum

|____0x00=0_____|____0x11=17____|____________ 0x5D39_______

|                                  source

|________________________192.168.59.132_______________________

|                                destination

|____________________________    5.6.7.8_____________________

UDP__________________________________________________________

|          source port          |       destination port

|__________0x04D2=1234__________|___________0x0050=80_______

|            length             |           checksum

|___________0x0008=8____________|_________0xF281=62081_______


其中,Ethernet部分表示以太网的数据报信息,在该部分中,00:0C:29:FD:DE:B8为源MAC地址,是当前主机的MAC地址。其他字段的值都为默认值。


2)基于Ethernet和IPv4伪造UDP包。伪造MAC地址为00:11:22:aa:bb:cc,源端口为443。向目标主机192.168.59.135(其MAC地址为00:0c:29:ca:e4:66)的8080端口发送UDP数据包,执行命令如下:


root@daxueba:~# netwox 35 -a 00:11:22:aa:bb:cc -b 00:0c:29:ca:e4:66 -m 192.168.59.135 -o 443 -p 8080


输出信息如下:


Ethernet________________________________________________________.

| 00:11:22:AA:BB:CC-> 00:0C:29:CA:E4:66 type:0x0800

|_____________________________________________________________

IP______________________________________________________________.

|version|  ihl  |      tos      |            totlen

|___4___|___5___|____0x00=0_____|___________0x001C=28______

|              id                     |r|D|M|       offsetfrag

|_________ 0xA313=41747_________|0|0|0|________0x0000=0______

|      ttl      |   protocol    |           checksum

|____0x00=0_____|____0x11=17____|____________ 0x1F62_______

|                                  source

|________________________192.168.59.132_______________________

|                                destination

|__________________________192.168.59.135_____________________

UDP___________________________________________________________

|          source port          |       destination port

|__________ 0x01BB=443__________|___________ 0x1F90=8080______

|            length             |           checksum

|___________0x0008=8____________|_________ 0xE636=58934_______


在Ethernet部分可以看到,源MAC地址变为了伪造的地址00:11:22:AA:BB:CC。在IP部分中可以看到,源IP地址仍然为当前主机的IP地址192.168.59.132。


3)通过抓包验证伪造了MAC地址的UDP数据包,如图5所示。其中,第2个数据包为伪造的UDP包,源IP地址为真实的IP地址192.168.59.132。在Ethernet II部分中可以看到,Source的值为00:11:22:aa:bb:cc,该地址为伪造的MAC地址,而不是真实的MAC地址。

网络基础知识:UDP协议概述

图5  伪造MAC地址的UDP包



团队网络安全技术方向公众号,给个关注网络基础知识:UDP协议概述

原文始发于微信公众号(LemonSec):网络基础知识:UDP协议概述

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月10日00:00:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网络基础知识:UDP协议概述https://cn-sec.com/archives/566984.html

发表评论

匿名网友 填写信息