建站的注意事项,博客网站素材,网站开发制作学徒,房地产公司基本介绍文章目录 1. 简介2. 特点3. UDP数据报结构4. 基于UDP的应用层协议5. UDP安全性问题6. 使用udp传输数据的系统就一定不可靠吗#xff1f;7. 基于UDP的主机探活 python实现 1. 简介
User Datagram Protocol#xff0c;用户数据报协议#xff0c;基于IP协议提供面向无连接的网… 文章目录 1. 简介2. 特点3. UDP数据报结构4. 基于UDP的应用层协议5. UDP安全性问题6. 使用udp传输数据的系统就一定不可靠吗7. 基于UDP的主机探活 python实现 1. 简介
User Datagram Protocol用户数据报协议基于IP协议提供面向无连接的网络通信服务。特点简单不可靠面向数据报。 UDP协议位于ISO网络模型的传输层。
2. 特点
特点解释
无连接 两台主机在使用UDP进行数据传输时不需要建立连接只需要知道对方端的IP和端口号即可把数据发送过去。不可靠UDP协议没有确认重传机制如果因为网络故障导致报文无法发到对方或者对方接收到了报文但是传输过程中乱序了对方检验失败后把乱序的包丢了UDP协议层也不给应用层任何错误反馈信息。面向数据报以数据报文为单位一个个发出去然后一个个接收的导致上面的应用层无法灵活控制数据的读写次数和数量。
3. UDP数据报结构 源端口号: 发送方的端口用于唯一确认发送方主机的一个进程。 大小范围1-65535。目的端口 接收方的端口用于唯一确认接收方主机的一个进程。大小范围1-65535。UDP长度一个UDP报文所能传输的最大长度是64K包含UDP首部。UDP校验和 为了确保数据包在传送过程中数据检测数据是否被篡改和丢失的一种手段。通过二进制补码求和进行校验校验和的内容包括 伪首部(IP数据包的一部分)源IP地址(32位),目的IP地址(32位),保留字段(8位 0), 协议号(8位, 指定为17代表udp)UDP长度(16) UDP数据报的总长度包括头部和数据UDP首部源端口号、目的端口号、长度字段、校验和字段(初始值为0)UDP数据: 实际传输的应用层数据。 端口和应用程序的关系 1. 主机运行的一个进程可以绑定多个端口号。2.一个主机的某一个端口只能被一个进程所绑定。 可以推导出一个主机上的端口可以唯一确认主机上的一个进程 4. 基于UDP的应用层协议
DNS协议 域名解析协议 域名 IP.DHCP协议动态主机配置协议 为设备动态分配IP地址、网关、DNS服务器等网络参数。NTP协议 用于同步网络中的设备时钟。SNMP协议 用于网络设置的监控和管理如路由器、交换机等。RIP协议 路由信息协议是一种距离向量路由协议用于在网络设备间交换路由信息。
上述协议的几个明显的特点
传输数据一般都比较小。对速度要求较高延迟时间低不需要或者无法进行连接.(例如dhcp初次启动时设备根本就没有ip地址)由于网络问题丢失数据也不会非常严重重新发起请求即可。 如果实际开发需求中如果你的需求任务满足上述几种要求时可以考虑使用udp去实现。 5. UDP安全性问题
易受攻击性问题(微造身份)udp本身是无连接的数据包在发送之前不需要建立连接攻击者可以轻易伪造源地址发送UDP数据进行IP欺骗攻击。反射攻击和放大攻击: udp反射攻击 攻击者伪造受害者的 IP 地址向网络上的其他服务器发送大量UDP 请求。由于很多服务器会自动回复请求这些回复数据将被发送到受害者的地址从而导致大量流量集中到受害者一侧形成 DDoS 攻击。udp放大攻击基于udp的应用层协议(DNS,NTP)返回的响应包含较大的数据包。攻击者利用伪造的 IP 地址发送小请求目标服务器返回的大量数据包会直接被发送给受害者放大了攻击效果。 udp未加密传输 数据以明文形式传输容易被窃听。中间人可以劫持udp流量监听内容进行功能流量重放等攻击手段。利用防火墙漏洞传输有害信息 UDP 是无连接的协议某些情况下可以绕过防火墙的状态检测。攻击者可以通过精心设计的数据包穿透防火墙访问内部的网络资源。
6. 使用udp传输数据的系统就一定不可靠吗 先说结论 虽然udp本身不提供可靠性保证但在实际应用中通过应用层协议的设计可以使得基于UDP的通信具备可靠性。 常见例子
DNS 通过使用超时重传机制来保证查询的可靠性。TFTP 通过应用层的确认和重传机制来保证文件传输的可靠性。RTP(用于传输音视频的协议) 通过结合RTCP提供的一些保障机制例如 序列号和时间戳、丢包检测、RTCP反馈。来实现可靠传输。
7. 基于UDP的主机探活 python实现 实现原理当向目标发送一个UDP数据包之后目标是不会发回任何UDP数据包的。不过如果目标主机处于活跃状态但是目标端口是关闭状态时会返回一个ICMP数据包这个包的含义是unreachable.如果目标主机处于不活跃状态这时接收不到任务响应数据。 挑选目标主机的目标端口也是一个比较重要的步骤。一般思路是设置不太可能被开放端口例如65535这种不常用的端口。我下面这个脚本通过随机数去生成一个目标端口不一定适用所有情况可以根据要扫描网段或机器的环境设置目标端口。
from scapy.layers.inet import *
from optparse import OptionParser
import nmap
import sys发送udp数据包
def main():usage Usage: %prog -i ip adressparse OptionParser(usageusage)# 获取网段地址parse.add_option(-i, --ip, typestring, destIP, helpspecify the IP address)options, args parse.parse_args()# checkif options.IP is None:parse.print_help()sys.exit(1)if - in options.IP:start int(options.IP.split(-)[0].split(.)[3])end int(options.IP.split(-)[1])ipPrefix ..join(options.IP.split(.)[:3])for i in range(start, end 1):Scan(ipPrefix . str(i))else:Scan(options.IP)def sent_udp_message(address):ip IP()udp UDP()r (ip / udp)r[IP].dst addressr[UDP].dport random.randint(1024, 65535)a sr1(r)a.display()
通过UDP探测包探测主机存活def Scan(ip):dport random.randint(1, 65535)try:packet IP(dstip) / UDP(dportdport)response sr1(packet, timeout10, verbose0)if response:if int(response[IP].proto) 1:print(ip is up)else:print(ip is down)else:print(ip is down)except Exception as e:print(e)借助nmap实现udp探测def NmapScan(targetIp):nm nmap.PortScanner()try:result nm.scan(hoststargetIp, arguments-PU)state result[scan][targetIp][status][state]print([{}] is [{}].format(targetIp, state))except Exception as e:print(e)if __name__ __main__:main()