Python构造TCP三次握手、传输数据、四次挥手pcap数据包并打乱顺序

Python构造数据包,包含:

TCP三次握手、

传输数据、

四次挥手

实现 随机乱序TCP数据包

from scapy.all import *
from scapy.all import Ether, IP, TCP, UDP, wrpcap
from abc import ABC, abstractmethod
import random
import dpkt
from scapy.all import *class TcpPacketStrategy(ABC):@abstractmethoddef generate_packets(self, src_ip, dst_ip, src_port, dst_port, seq_num, ack_num, data=None):passclass ThreeWayHandshakeStrategy(TcpPacketStrategy):def generate_packets(self, src_ip, dst_ip, src_port, dst_port, seq_num, ack_num, data=None):syn = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, flags='S', seq=seq_num)syn_ack = IP(src=dst_ip, dst=src_ip) / TCP(sport=dst_port, dport=src_port, flags='SA', seq=1000,ack=syn.seq + 1)ack = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, flags='A', seq=syn.seq + 1,ack=syn_ack.seq + 1)return [syn, syn_ack, ack]class DataTransferStrategy(TcpPacketStrategy):def generate_packets(self, src_ip, dst_ip, src_port, dst_port, seq_num, ack_num, data_list=None):packets = []for data in data_list:packet = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, flags='PA', seq=seq_num,ack=ack_num) / Raw(load=data)packets.append(packet)seq_num += len(data)  # 假设数据长度即为字节数return packetsclass FourWayTeardownStrategy(TcpPacketStrategy):def generate_packets(self, src_ip, dst_ip, src_port, dst_port, seq_num, ack_num, data=None):# 客户端发送 FINfin = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, flags='FA', seq=seq_num, ack=ack_num)# 服务器收到 FIN 后发送 ACKack1 = IP(src=dst_ip, dst=src_ip) / TCP(sport=dst_port, dport=src_port, flags='A', seq=ack_num, ack=fin.seq + 1)# 服务器发送 FINfin2 = IP(src=dst_ip, dst=src_ip) / TCP(sport=dst_port, dport=src_port, flags='FA', seq=ack_num,ack=fin.seq + 1)# 客户端发送 ACK 确认ack2 = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, flags='A', seq=fin.seq + 1,ack=fin2.seq + 1)return [fin, ack1, fin2, ack2]class TcpPcapGenerator:def __init__(self, strategy: TcpPacketStrategy):self._strategy = strategydef set_strategy(self, strategy: TcpPacketStrategy):self._strategy = strategydef generate(self, src_ip, dst_ip, src_port, dst_port, seq_num, ack_num, data=None):return self._strategy.generate_packets(src_ip, dst_ip, src_port, dst_port, seq_num, ack_num, data)class WriteTcpPcap:def writeTcpPcap(self,array):src_ip = array[0]dst_ip = array[1]src_port = array[2]dst_port = array[3]seq_num = array[4]ack_num = array[5]data =  array[6]src_ip_lastTwoDigits = "".join(array[0].split('.')[-2:])dst_ip_lastTwoDigits = "".join(array[1].split('.')[-2:])fileName = f'{src_ip_lastTwoDigits}_{dst_ip_lastTwoDigits}_{src_port}_{dst_port}_{seq_num}'print(fileName)# 生成三次握手数据包generator = TcpPcapGenerator(ThreeWayHandshakeStrategy())handshake_packets = generator.generate(src_ip, dst_ip, src_port, dst_port, seq_num, ack_num)# 计算初始序列号和确认号seq_num += 1ack_num = 1001# 生成数据传输数据包generator.set_strategy(DataTransferStrategy())data_packets = generator.generate(src_ip, dst_ip, src_port, dst_port, seq_num, ack_num,data)# 更新序列号和确认号seqAndLen = []for packet in data_packets:seqAndLen.append(seq_num)        # 表示:Sequence Number (raw), 而非:Sequence Numberseq_num += len(packet[Raw].load)# 生成四次挥手数据包generator.set_strategy(FourWayTeardownStrategy())teardown_packets = generator.generate(src_ip, dst_ip, src_port, dst_port, seq_num, ack_num)# 合并所有数据包all_packets = handshake_packets + data_packets + teardown_packets# 写入到PCAP文件wrpcap(f'{fileName}.pcap', all_packets)print(f"PCAP file generated: {fileName}.pcap")print(f"seqAndLen : length:{len(seqAndLen)}, value:{seqAndLen}")class RandomPcap:def randomPcap(self, file, seed, index):passclass SeedRandomPcap(RandomPcap):def randomPcap(self, file,seed, index):packets =  rdpcap(file)packet_indices = indexrandom.seed(seed)              # 随机种子random.shuffle(packet_indices) # 打乱列表后值固定[8, 3, 6, 14, 11, 15, 2, 12, 0, 1, 13, 10, 16, 9, 5, 4, 7]print(packet_indices)selected_packets = [packets[i] for i in packet_indices]for i, packet in enumerate(selected_packets, start=1):print(f"Packet {i}: {packet.summary()}")# 如果你想要将截取的报文写入新的pcap文件shuffledName = file.split('.')[0]# 使用 join() 函数拼接字符串列表result = ''.join([str(num) for num in packet_indices])wrpcap(f'{shuffledName}_{result}.pcap', selected_packets)class SeedNoneRandomPcap(RandomPcap):def randomPcap(self, file,seed, index):packets =  rdpcap(file)packet_indices = indexrandom.seed(seed)              # 随机种子random.shuffle(packet_indices) # 打乱列表后值不固定print(packet_indices)selected_packets = [packets[i] for i in packet_indices]for i, packet in enumerate(selected_packets, start=1):print(f"Packet {i}: {packet.summary()}")# 如果你想要将截取的报文写入新的pcap文件shuffledName = file.split('.')[0]# 使用 join() 函数拼接字符串列表result = ''.join([str(num) for num in packet_indices])wrpcap(f'{shuffledName}_{result}.pcap', selected_packets)class ExtractRandomPcap(RandomPcap):def randomPcap(self, file,seed, index):packets =  rdpcap(file)packet_indices = indexselected_packets = [packets[i] for i in packet_indices]for i, packet in enumerate(selected_packets, start=1):print(f"Packet {i}: {packet.summary()}")# 如果你想要将截取的报文写入新的pcap文件shuffledName = file.split('.')[0]# 使用 join() 函数拼接字符串列表result = ''.join([str(num) for num in index])wrpcap(f'{shuffledName}_{result}.pcap', selected_packets)# 使用示例
if __name__ == "__main__":array = [ "192.168.1.2","192.168.1.1", 12345,80,1000,0,["Data1", "Data12", "Data123", 'Data1234', "Data12345",'Data123456','Data1234567','Data12345678','Data123456789','Data1234567890']]WriteTcpPcap().writeTcpPcap(array)array = [ "192.168.2.2","192.168.1.1", 12345,80,1000,0,["Data1", "Data12", "Data123", 'Data1234', "Data12345",'Data123456','Data1234567','Data12345678','Data123456789','Data1234567890']]WriteTcpPcap().writeTcpPcap(array)array = [ "192.168.1.2","192.168.1.1", 12345,81,1000,0,["Data1", "Data12", "Data123", 'Data1234', "Data12345",'Data123456','Data1234567','Data12345678','Data123456789','Data1234567890']]WriteTcpPcap().writeTcpPcap(array)array = [ "192.168.2.2","192.168.1.1", 12345,81,1000,0,["Data1", "Data12", "Data123", 'Data1234', "Data12345",'Data123456','Data1234567','Data12345678','Data123456789','Data1234567890']]WriteTcpPcap().writeTcpPcap(array)filePcap = '12_11_12345_80_1000.pcap'SeedRandomPcap().randomPcap(filePcap, 3, [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])SeedNoneRandomPcap().randomPcap(filePcap, None, [3, 4, 5, 6, 7, 8, 9, 10, 11, 12])ExtractRandomPcap().randomPcap(filePcap, 0, [3]) # 0,1,2 三次握手, 3第1个数据包ExtractRandomPcap().randomPcap(filePcap, 0, [12])# 12最后一个数据包ExtractRandomPcap().randomPcap(filePcap, 0, [4])ExtractRandomPcap().randomPcap(filePcap, 0, [5, 6, 7])ExtractRandomPcap().randomPcap(filePcap, 0, [4, 6, 10])ExtractRandomPcap().randomPcap(filePcap, 0, [3,9,6,7,4])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6月18日(周二)美股行情总结:纳指七日连创新高,英伟达市值全球第一,苹果微软回落,油价七周最高

美国5月零售销售意外走软,尽管一众美联储官员均鹰派发声支持多等待通胀数据再做决策,市场仍抬升对年内降息两次的押注。标普500指数在七天里第六天上涨并再创新高,标普科技板块连续七天创新高、期间累涨8.6%,道指一周高位&#xf…

MySQL----慢查询日志

慢日志 MySQL可以设置慢查询日志,当SQL执行的时间超过我们设定的时间,那么这些SQL就会被记录在慢查询日志当中,然后我们通过查看日志,用explain分析这些SQL的执行计划,来判定为什么效率低下。 查看相关信息 show va…

iOS 18 终于更新了 iOS 隐藏 App 功能,这次是真的隐藏

如何锁定或隐藏 App 我们一起来看看 iOS 如何隐藏软件,下面是具体的操作步骤: iOS 隐藏 App 的第一步肯定是找到你想隐藏或锁定的应用程序,然后长按它的图标,在长按之后出现的选项中我们选择“需要 Face ID”。 然后在新弹出的选…

web版的数字孪生,选择three.js、unity3D、还是UE4

数字孪生分为客户端版和web端版,开发引擎多种多用,本文重点分析web端版采用哪种引擎最合适, 贝格前端工场结合实际经验和网上主流说法,为您讲解。 一、数字孪生的web版和桌面版 数字孪生的Web版和桌面版是数字孪生技术在不同平台…

Mamba: Linear-Time Sequence Modeling with Selective State Spaces论文笔记

文章目录 Mamba: Linear-Time Sequence Modeling with Selective State Spaces摘要引言 相关工作(SSMs)离散化计算线性时间不变性(LTI)结构和尺寸一般状态空间模型SSMs架构S4(补充)离散数据的连续化: 基于零阶保持技术做连续化并采样循环结构表示: 方便快速推理卷积结构表示: 方…

对SpringBoot入门案例的关键点

我们SpringBoot的入门案例中&#xff0c;即做了两个重要工作&#xff1a; 配置pom.xml文件写启动类 1.pom.xml依赖配置文件 ①帮助我们进行版本控制的父模块 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

Inpaint_2024软件最新版下载-inpaint下载安装2024-inpaint下载最新版本

众多使用者向我们证明了高效去除背景无关游客&#xff0c;只需要花费几秒钟在照片上选择不必要的对象或人员&#xff0c;剩下的交给Inpaint。准确来讲快速去水印&#xff0c;用Inpaint,选中水印&#xff0c;一键清除&#xff0c;还你一个干净整洁的图形。我们都知道快速去水印&…

【2024】kafka streams的详细使用与案例练习(2)

目录 前言使用1、整体结构1.1、序列化 2、 Kafka Streams 常用的 API2.1、 StreamsBuilder2.2、 KStream 和 KTable2.3、 filter和 filterNot2.4、 map 和 mapValues2.5、 flatMap 和 flatMapValues2.6、 groupByKey 和 groupBy2.7、 count、reduce 和 aggregate2.8、 join 和 …

基于EasyAnimate模型的视频生成最佳实践

EasyAnimate是阿里云PAI平台自主研发的DiT的视频生成框架&#xff0c;它提供了完整的高清长视频生成解决方案&#xff0c;包括视频数据预处理、VAE训练、DiT训练、模型推理和模型评测等。本文为您介绍如何在PAI平台集成EasyAnimate并一键完成模型推理、微调及部署的实践流程。 …

【Python特征工程系列】基于方差分析的特征重要性分析(案例+源码)

这是我的第304篇原创文章。 一、引言 方差分析&#xff08;Analysis of Variance&#xff0c;简称ANOVA&#xff09;是一种统计方法&#xff0c;用于比较两个或多个组之间的平均值是否存在显著差异。 方法简介&#xff1a; ANOVA 通过分解总方差为组间方差和组内方差&#x…

怪物猎人物语什么时候上线?游戏售价多少?

怪物猎人物语是一款全新的RPG游戏&#xff0c;玩家在游戏中将化身为骑士&#xff0c;不断与怪物建立羁绊、不断成长&#xff0c;踏上前往外面世界的旅程&#xff0c;且最终目的地是以狩猎怪物为生的猎人世界。因为最近有不少玩家在关注这款游戏&#xff0c;所以下面就给大家分享…

上位机图像处理和嵌入式模块部署(h750 mcu中的pwm控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓的pwm&#xff0c;其实就是方波。我们都知道&#xff0c;对于一个电机来说&#xff0c;如果插上正负极的话&#xff0c;那么电机就会全速运转。…

leetcode (top100)盛最多水的容器

题目&#xff1a; 题解&#xff1a; 第一种可行的方案&#xff1a; 设置左指针指向第一条线&#xff0c;设置右指针指向最后一条线。每次向中间移动两条线中最短的一条&#xff0c;计算移动过程中最大接水量。 本题可以看出影响接水量的有两个因素&#xff0c;两条线的距离&…

PHP反序列化

PHP反序列化 什么是反序列化操作&#xff1f; 类型转换 - PHP & JavaEE & Python&#xff08;见图&#xff09; 序列化&#xff1a;对象转换为数组或字符串等格式 反序列化&#xff1a;将数组或字符串等格式转换成对象 serialize() //将对象转换成一个字符串 un…

配置小程序

小程序配置 1.全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。 完整配置项说明请参考小程序全局配置 以下是一个包含了部分常用配置选项的 app.json &#xff1a; {&q…

聚观早报 | 小米15配置规格曝光;比亚迪车险开售

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月19日消息 小米15配置规格曝光 比亚迪车险开售 真我GT6细节曝光 极星汽车加速全球扩张 Model 3高性能版开启交…

windows anaconda 安装 Labelme

安装 # 创建环境 conda create -n labelme python3.6 #激活环境 conda activate labelme # 安装依赖 conda install pyqt conda install pillow # 安装labelme conda install labelme3.16.2 # 启动labelme labelme右键选择标注类型&#xff0c;从上到下为多边形&#xff08;常…

计算机的五大功能部件应用及特点

目录 计算机的五大功能部件 1.现代计算机的结构 2.主存储器 ​​​​​​​ 3.运算器 4.控制器 5.各部件的特点 5.1主存特点 5.2外存特点 5.3运算器特点 5.4控制器特点 计算机的五大功能部件 1.现代计算机的结构 一般将运算器和控制器集成到同一个芯片上&#xff…

微前端乾坤方案

微前端乾坤方案 了解乾坤 官方文档 介绍 qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 的核心设计理念 &#x1f944; 简单 由于主应用微应用都能做到技术栈无关&#xff0c;qiankun 对…

CCS条形光源——HLDL3系列,长距离和宽范围照射应用的不二之选

机器视觉系统中&#xff0c;光源起着重要作用&#xff0c;不同类型的光源应用也不同&#xff0c;选择合适的光源成像效果非常明显。今天我们一起来看看CCS光源——工业用条形光源HLDL3系列。 高亮LED光源HLDL3系列 适用于长距离和宽范围照射的条形光源。 适用于各种检测案例&a…