当前位置: 首页 > news >正文

udp分片报文发送和接收

读文件通过udp分片发送的目的端:(包含错误的分片包)

#!/usr/bin/python
# -*- coding: utf-8 -*-#python send_100frag_file.py -p 55432 -f snatdownloadimport argparse
import loggingfrom scapy.all import *# Define the maximum size of a packet
MAX_SIZE = 65500# Define the IP addresses and ports
src_ip = '11.0.0.1'
dst_ip = '11.0.0.2'
src_port = 12345
dst_port = 54321# Define the payload data
payload_data = 'A' * (MAX_SIZE - 20 - 8)
payload_data = 'A' * MAX_SIZE
# Create the IP header# 创建参数解析器对象
parser = argparse.ArgumentParser(description="UDP数据接收脚本,可指定端口号和发送数据的文件名: python send_100frag_file.py -p 55432 -f snatdownload")# 添加端口号参数,指定参数名为port,类型为整数,帮助信息为指定接收UDP数据的端口号,默认值设为9999
parser.add_argument('-p', '--port', type=int, help="指定接收UDP数据的端口号", default=9999)# 添加文件名参数,指定参数名为filename,类型为字符串,帮助信息为指定保存接收到数据的文件名,默认值设为'received_data.data'parser.add_argument('-f', '--filename', type=str, help="指定发送数据的文件名", default='input_data.data')
parser.add_argument('-i', '--ipid', type=int, help="指定ip id", default=11111)# 解析命令行参数
args = parser.parse_args()# 获取解析后的端口号和文件名
port = args.port
filename = args.filename
ipid = args.ipidip_header = IP(src=src_ip, dst=dst_ip, id = ipid)# Create the UDP header
#udp_header = UDP(sport=src_port, dport=dst_port+int(sys.argv[1]))
udp_header = UDP(sport=src_port, dport=port)# Combine the headers and payload# 获取文件大小,用于后续判断是否发送完成
file_size = os.path.getsize(filename)
sent_size = 0# 以二进制模式打开文件,方便处理各种类型的文件
with open(filename, 'rb') as file:while True:packet = None# 每次读取1024字节的数据块,可根据实际网络情况和文件大小调整这个值payload_data = file.read(MAX_SIZE)if not payload_data:break# 发送消息,需将消息编码为字节类型,因为网络传输的数据是字节流形式ip_header = IP(src=src_ip, dst=dst_ip, id = ipid)packet = ip_header / udp_header / payload_datafragments = fragment(packet, fragsize=656)for i, frag in enumerate(fragments):print('Fragment ' + str(i+1) + ': ' + str(len(frag)) + ' bytes')#print(fragment.show())if i < len(fragments) - 0:send(frag, verbose=False)if i >= 50:frag[IP].flags=0send(frag, verbose=False)                ipid += 1sent_size += len(payload_data)print("发送 {} 字节, 已发送 {} 字节,共 {} 字节".format(len(payload_data), sent_size, file_size))end_marker = "END".encode('utf-8')
packet = ip_header / udp_header / end_marker
send(packet, verbose=False)
print("发送结束标志,发送结束")

接收指定端口收到的udp报文保存到本地文件,通过比较发送文件和接收文件的内容测试中间转发设备是否正确完整的处理了分片和重组:

#!/usr/bin/python
# -*- coding: utf-8 -*-#python recv_dgram.py  -p 55432 -f my_data.txtimport socket
import argparse
import logging# 创建参数解析器对象
parser = argparse.ArgumentParser(description="UDP数据接收脚本,可指定端口号和保存数据的文件名: python recv_dgram.py  -p 55432 -f my_data.txt")# 添加端口号参数,指定参数名为port,类型为整数,帮助信息为指定接收UDP数据的端口号,默认值设为9999
parser.add_argument('-p', '--port', type=int, help="指定接收UDP数据的端口号", default=9999)# 添加文件名参数,指定参数名为filename,类型为字符串,帮助信息为指定保存接收到数据的文件名,默认值设为'received_data.data'
parser.add_argument('-f', '--filename', type=str, help="指定保存接收到数据的文件名", default='received_data.data')# 解析命令行参数
args = parser.parse_args()# 获取解析后的端口号和文件名
port = args.port
file_name = args.filename# 创建UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本地地址和端口,这里假设绑定到本地所有可用地址(空字符串)的9999端口,你可以按需修改
local_address = ('', port)
udp_socket.bind(local_address)
udp_socket.settimeout(5)  # 设置超时时间为5秒# 以二进制写入模式打开文件,方便处理各种类型的数据(文本、二进制等)
tot_len = 0
with open(file_name, 'wb') as file:while True:try:# 接收数据报,设置缓冲区大小为1024字节,可根据实际情况调整大小udp_socket.settimeout(5)  # 设置超时时间为5秒data, sender_address = udp_socket.recvfrom(65530)if not data:breakif len(data) == 3 and data.decode('utf-8') == "END":logging.info("完成接收")print("完成接收")breaktot_len += len(data)# 将接收到的数据写入文件file.write(data)print("从 {}接收到{}字节, total length: {}".format(sender_address, len(data), tot_len))except socket.timeout:logging.info("接收超时,可能暂时没有消息到达")continueexcept socket.error as e:print("接收UDP数据报时出错: {}".format(e))break# 关闭套接字
udp_socket.close()
print("已成功将接收到的UDP数据报保存到 {} 文件中。".format(file_name))

相关文章:

udp分片报文发送和接收

读文件通过udp分片发送的目的端&#xff1a;&#xff08;包含错误的分片包&#xff09; #!/usr/bin/python # -*- coding: utf-8 -*-#python send_100frag_file.py -p 55432 -f snatdownloadimport argparse import loggingfrom scapy.all import *# Define the maximum size …...

【从零开始入门unity游戏开发之——C#篇39】C#反射使用——Type 类、Assembly 类、Activator 类操作程序集

文章目录 前言一、前置知识1、编译器2、程序集&#xff08;Assembly&#xff09;3、元数据&#xff08;Metadata&#xff09; 二、反射1、反射的概念2、反射的作用3、反射的核心Type 类3.1 Type 类介绍3.2 不同方法获取 Type3.3 获取type类型所在的程序集的相关信息 4、反射的常…...

安卓触摸事件的传递

setOnTouchListener()返回值的副作用&#xff08;触摸事件是否继续往下或往后传递&#xff09;如下&#xff1a; 返回值效果是否往下层view传递是否往当前view的后续监听传递true该pointer离开屏幕前的后续所有触摸事件都会传递给该TouchListener否否false该pointer离开屏幕前…...

idea项目导入gitee 码云

1、安装gitee插件 IDEA 码云插件已由 gitosc 更名为 gitee。 1 在码云平台帮助文档http://git.mydoc.io/?t153739上介绍的很清楚&#xff0c;推荐前两种方法&#xff0c; 搜索码云插件的时候记得名字是gitee&#xff0c;gitosc已经搜不到了。 2、使用码云托管项目 如果之…...

典型常见的基于知识蒸馏的目标检测方法总结三

来源&#xff1a;Google学术2023-2024的顶会顶刊论文 NeurIPS 2022&#xff1a;Towards Efficient 3D Object Detection with Knowledge Distillation 为3D目标检测提出了一种知识蒸馏的Benchmark范式&#xff0c;包含feature的KD&#xff0c;Logit的cls和reg的KD&#xff0c…...

端口被占用

端口8080被占用 哈哈哈&#xff0c;我是因为后端项目跑错了&#xff0c;两个项目后端名称太像了&#xff1b; &#xff08;1&#xff09;netstat -aon | findstr 8080&#xff0c;找到占用8080端口的进程号&#xff0c;获取对应的进程号pid&#xff1b; &#xff08;2&#…...

Javascript知识框架图(待完善)

以下是一个清晰且详细的 JavaScript 知识框架&#xff0c;涵盖基础知识到高级概念&#xff0c;适合学习和参考&#xff1a; JavaScript 知识框架 1. 基础知识 数据类型 原始类型&#xff1a;Number&#xff0c;String&#xff0c;Boolean&#xff0c;Null&#xff0c;Undefin…...

清华大学Python包镜像站点

清华大学提供了一个Python包镜像站点&#xff0c;其中包括了许多常用的Python包。使用这个镜像站点可以提高下载Python包时的速度&#xff0c;因为包已经存储在国内的服务器上&#xff0c;从而减少了网络延迟。 要使用清华的pip镜像&#xff0c;你可以在pip命令中指定-i参数来…...

逆境清醒文章总目录表

逆境清醒文章总目录表 零、时光宝盒&#x1f33b; &#xff08;https://blog.csdn.net/weixin_69553582 逆境清醒&#xff09; 《你的答案》歌曲原唱&#xff1a;阿冗&#xff0c;填 词&#xff1a;林晨阳、刘涛&#xff0c;谱曲&#xff1a;刘涛 也许世界就这样&#xff0c…...

LeetCode算法题——移除元素

题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&#xff1…...

常见的中间件漏洞

1.Tomcat Tomcat介绍 tomcat是⼀个开源而且免费的jsp服务器&#xff0c;默认端口 : 8080&#xff0c;属于轻量级应⽤服务器。它可以实现 JavaWeb程序的装载&#xff0c;是配置JSP&#xff08;Java Server Page&#xff09;和JAVA系统必备的⼀款环境。 在历史上也披露出来了很…...

IPv6的过度技术

如何界定手动与自动&#xff1f;  主要是隧道目标地址能否自动获取 &#x1f46f;1. 双栈 必须支持IPv4和IPv6协议  链接双栈网络的接口必须同时配置v4和v6地址  路由器能够根据二层标记识别协议&#xff0c;type&#xff1a;0x0800代表IPV4&#xff0c;type&#xff1a;0x…...

Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p38708 分析师&#xff1a;Yuling Fang 信息时代的来临使得企业营销焦点从产品中心转向客户中心&#xff0c;客户关系管理成为企业的核心问题&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 客户关系管理的关键是客…...

WebRTC的三大线程

WebRTC中的三个主要线程&#xff1a; signaling_thread&#xff0c;信号线程&#xff1a;用于与应用层交互worker_thread&#xff0c;工作线程&#xff08;最核心&#xff09;&#xff1a;负责内部逻辑处理network_thread&#xff0c;网络线程&#xff1a;负责网络数据包的收发…...

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…...

数据设计规范

目录 一、数据库设计的原则 二、表设计原则 三、其他设计规范 四、最佳实践 数据库设计&#xff08;Database Design&#xff09;是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库及其应用系统&#xff0c;使之能够有效地存储数据&#…...

基于SpringBoot的宠物寄养系统的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...

深度学习中的HTTP:从请求到响应的计算机网络交互

在现代深度学习应用中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;不仅仅是网页浏览的基础协议&#xff0c;它也在机器学习和人工智能的服务架构中扮演着至关重要的角色。本文将深入探讨HTTP在深度学习中的应用&#xff0c;并阐明它如何支持模型的训练、推理及API服…...

Agent系列:AppAgent v2-屏幕智能Agent(详解版)

引言 简介 方法 Agent 框架 Agent 交互 探索阶段 部署阶段 文档生成 高级功能 实验结果 总结 局限性 未来工作 1. 引言 大语言模型&#xff08;LLM&#xff09;如 ChatGPT 和 GPT-4 显著提升了自然语言处理能力&#xff0c;并且推动了智能体在自主决策中的应用。…...

艾体宝方案丨全面提升API安全:AccuKnox 接口漏洞预防与修复

一、API 安全&#xff1a;现代企业的必修课 在现代技术生态中&#xff0c;应用程序编程接口&#xff08;API&#xff09;扮演着不可或缺的角色。从数据共享到跨平台集成&#xff0c;API 成为连接企业系统与外部服务的桥梁。然而&#xff0c;伴随云计算的普及与微服务架构的流行…...

广州PMP培训机构怎么选?才聚是标准答案

选广州PMP培训机构&#xff0c;核心看官方授权、师资、通过率、本地化服务、学考一体化&#xff0c;才聚在广州确实是综合实力最强、最稳妥的 “标准答案”。 一、在选择时&#xff0c;可以从下面几个方面来评估一家培训机构&#xff0c;看看哪家更适合你&#xff1a; 官方授权…...

NoFences:免费开源桌面分区管理工具,告别杂乱桌面,提升工作效率50%

NoFences&#xff1a;免费开源桌面分区管理工具&#xff0c;告别杂乱桌面&#xff0c;提升工作效率50% 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 想要告别杂乱无章的Win…...

微型LoRa数传电台:5KM无线通讯,空旷实测无压力

微型LoRa数传电台的通讯距离没有固定数值&#xff0c;从几十米到十几公里都有可能。它强烈依赖于具体的工作环境、设备配置以及天线状况。 一、不同环境下通讯距离&#xff1a; 理想环境 (郊区、农田、沙漠、海上)下3 - 10 公里&#xff0c;收发天线间无任何遮挡&#xff0c;是…...

避坑指南:在Linux DRM驱动开发中,实现plane的update_plane回调时要注意哪些检查?

Linux DRM驱动开发实战&#xff1a;update_plane回调必须处理的4大核心检查 当你为一块新的显示控制器编写DRM驱动时&#xff0c;update_plane回调函数就像是在走钢丝——内核框架已经帮你过滤了明显的错误&#xff0c;但剩下的每一步操作都直接影响显示稳定性和系统可靠性。本…...

【Word排版】制表位实战:从入门到精通

1. 制表位到底是什么&#xff1f;为什么比空格更好用&#xff1f; 第一次用Word排简历时&#xff0c;我盯着参差不齐的工作经历栏发愁——明明按了20次空格键&#xff0c;为什么第二行的日期还是对不齐&#xff1f;直到同事教我按住Tab键&#xff0c;所有内容突然像军训列队般整…...

用仓颉语言搞定编译原理实验:从正则表达式到DFA的保姆级实现(附完整代码)

用仓颉语言实现编译原理实验&#xff1a;从正则表达式到DFA的实战指南 第一次接触编译原理实验时&#xff0c;看着那些晦涩的算法描述和数学符号&#xff0c;我完全不知道如何下手。直到用仓颉语言完整实现了从正则表达式到NFA再到DFA的转换过程&#xff0c;才真正理解了这些概…...

直接上代码吧,咱们先用Python+OpenCV搞个帧间差法的Demo。看这段核心代码

基于帧间差法进行视频目标检测处理 【是仅源码的价格】 【可写完整课程设计文档报告】 需要或需要请随时联系&#xff0c;博主常在线能秒回 1.[1]视频目标检测&#xff1a; 视频目标检测是指从视频流中自动识别和提取出运动目标的过程 视频目标检测算法通常基于以下原理和方法&…...

【原创改进代码】面向绿证-碳交易的综合能源系统鲁棒优化方法附Python代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

用STM32F103做个智能门禁卡管理终端:RC522读卡、OLED菜单、4x4键盘改密码,附工程源码

基于STM32F103的智能门禁终端开发实战&#xff1a;从模块整合到系统优化 在物联网设备开发领域&#xff0c;将多个功能模块整合为一个稳定可靠的终端系统是开发者常面临的挑战。本文将深入探讨如何基于STM32F103RCT6微控制器构建一个功能完善的智能门禁管理终端&#xff0c;涵盖…...

CosyVoice部署实战:从零到一搭建你的AI语音合成环境

1. 环境准备&#xff1a;打造AI语音合成的温床 第一次接触CosyVoice时&#xff0c;我对着官方文档发呆了半小时——那些密密麻麻的命令行像天书一样。后来才发现&#xff0c;搭建AI语音合成环境就像组装乐高积木&#xff0c;只要按步骤拼接关键部件就能成功。我们先从最基础的系…...