golang用字符串数据生成http的pcap文件

因为我有的只是pyload里面的字符串数据。没有协议头的部分,所以只能自己创建协议头的数据。
主要使用的就是go的gopacket和gopcap包。下面直接上代码

package mainimport ("bytes""encoding/base64""fmt""log""math/rand""time""github.com/google/gopacket""github.com/google/gopacket/layers""github.com/google/gopacket/pcapgo"
)// writeToPCAP_HTTP 函数用于将HTTP数据包写入到 PCAP 文件中
func writeToPCAP_HTTP(w *pcapgo.Writer, requestData []byte, responseData []byte) error {// 每个请求随机选择本地端口号srcPort := layers.TCPPort(rand.Intn(16383) + 49152) // 49152 - 65535 是动态/私有端口范围dstPort := layers.TCPPort(80)// 创建以太网帧ethernetLayer := &layers.Ethernet{SrcMAC:       []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},DstMAC:       []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},EthernetType: layers.EthernetTypeIPv4,}// 创建IP数据包(请求)requestIP := &layers.IPv4{Version:  4,IHL:      5,TTL:      64,Protocol: layers.IPProtocolTCP,SrcIP:    []byte{127, 0, 0, 1},DstIP:    []byte{127, 0, 0, 1},}// 计算IP数据包长度(请求)//requestIP.Length = uint16(len(requestData) + 40) // IP header length (20 bytes) + TCP header length (20 bytes) + request payload length// 创建TCP数据包(请求)requestTCP := &layers.TCP{SrcPort: srcPort,DstPort: dstPort,Seq:     rand.Uint32(), // 生成随机的 Sequence NumberAck:     0,Window:  16384,ACK:     false,SYN:     true,}requestTCP.SetNetworkLayerForChecksum(requestIP)// 保存请求数据包的 Sequence Number 和 Acknowledgment NumberrequestSeq := requestTCP.SeqrequestAck := requestTCP.Ack// 序列化并写入请求数据包buffer := gopacket.NewSerializeBuffer()//这个是重点!!!!不然你生成的pcap包很可能打不开options := gopacket.SerializeOptions{FixLengths:       true,	// 修复数据包长度ComputeChecksums: true,	// 计算checksum值}if err := gopacket.SerializeLayers(buffer, options, ethernetLayer, requestIP, requestTCP, gopacket.Payload(requestData)); err != nil {return fmt.Errorf("error serializing request packet: %v", err)}if err := w.WritePacket(gopacket.CaptureInfo{Timestamp:     time.Now(),Length:        len(buffer.Bytes()),CaptureLength: len(buffer.Bytes()),}, buffer.Bytes()); err != nil {return fmt.Errorf("error writing request packet: %v", err)}// 创建IP数据包(响应)responseIP := &layers.IPv4{Version:  4,IHL:      5,TTL:      64,Protocol: layers.IPProtocolTCP,SrcIP:    []byte{127, 0, 0, 1},DstIP:    []byte{127, 0, 0, 1},}// 计算IP数据包长度(响应)// responseIP.Length = uint16(len(responseData) + 40) // IP header length (20 bytes) + TCP header length (20 bytes) + response payload length// 创建TCP数据包(响应)responseTCP := &layers.TCP{SrcPort: dstPort,DstPort: srcPort,Seq:     requestAck,                            // 使用请求数据包的 Acknowledgment Number 作为响应数据包的 Sequence NumberAck:     requestSeq + uint32(len(requestData)), // 使用请求数据包的 Sequence Number 加上请求数据长度 作为响应数据包的 Acknowledgment NumberWindow:  16384,ACK:     true,SYN:     false,}responseTCP.SetNetworkLayerForChecksum(responseIP)// 序列化并写入响应数据包buffer = gopacket.NewSerializeBuffer()if err := gopacket.SerializeLayers(buffer, options, ethernetLayer, responseIP, responseTCP, gopacket.Payload(responseData)); err != nil {return fmt.Errorf("error serializing response packet: %v", err)}if err := w.WritePacket(gopacket.CaptureInfo{Timestamp:     time.Now(),Length:        len(buffer.Bytes()),CaptureLength: len(buffer.Bytes()),}, buffer.Bytes()); err != nil {return fmt.Errorf("error writing response packet: %v", err)}return nil
}func main() {// 创建一个字节缓冲区,用于存储 pcap 文件内容var buf bytes.Buffer// 创建一个 pcap writer,并将文件头数据写入到字节缓冲区中w := pcapgo.NewWriter(&buf)w.WriteFileHeader(65536, layers.LinkTypeEthernet)// HTTP请求数据1requestPayload := []byte("GET /mehmet.txt HTTP/1.1\r\nHost: 127.0.0.1\r\nUser-Agent: curl/7.55.1\r\nAccept: */*\r\n\r\n")// HTTP响应数据1responsePayload := []byte("HTTP/1.1 200 OK\r\nDate: Sun, 15 Oct 2017 21:58:29 GMT\r\nServer: Apache/2.4.27 (Debian)\r\nLast-Modified: Sun, 15 Oct 2017 21:57:37 GMT\r\nETag: \"12-55b9cfa5dd94e\"\r\nAccept-Ranges: bytes\r\nContent-Length: 18\r\nContent-Type: text/plain\r\n\r\nbest hacker ever.\n")// 将请求和响应数据写入到 PCAP 文件中if err := writeToPCAP_HTTP(w, requestPayload, responsePayload); err != nil {log.Fatal(err)}// HTTP请求数据2requestPayload = []byte("GET /hahhaha.txt HTTP/1.1\r\nHost: 127.0.0.1\r\nUser-Agent: curl/7.55.1\r\nAccept: */*\r\n\r\n")// HTTP响应数据2responsePayload = []byte("HTTP/1.1 200 OK\r\nDate: Sun, 15 Oct 2017 21:58:29 GMT\r\nServer: Apache/2.4.27 (Debian)\r\nLast-Modified: Sun, 15 Oct 2017 21:57:37 GMT\r\nETag: \"12-55b9cfa5dd94e\"\r\nAccept-Ranges: bytes\r\nContent-Length: 18\r\nContent-Type: text/plain\r\n\r\n1111 hacker ever.\n")// 将请求和响应数据写入到 PCAP 文件中if err := writeToPCAP_HTTP(w, requestPayload, responsePayload); err != nil {log.Fatal(err)}// 将pcap文件内容以Base64编码输出到控制台encoded := base64.StdEncoding.EncodeToString(buf.Bytes())fmt.Println(encoded)
}

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

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

相关文章

整合swagger,并通过Knife4j美化界面

如果是前后端分离的项目&#xff0c;需要前端的参与&#xff0c;所以一个好看的接口文档非常的重要 1、引入依赖 美化插件其中自带swagger的依赖了&#xff0c;所以不需要再单独导入swagger的坐标了 <dependency><groupId>com.github.xiaoymin</groupId>&…

单片机独立按键控制LED状态

一、前言 这幅图是按键的抖动与时间的联系 按键抖动&#xff1a;对于机械开关&#xff0c;当机械鮑点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子断开&#xff0c;所以在开关闭合及断开的…

长江路一号桥的安全监测革新

位于无锡新区的长江路一号桥&#xff0c;自1997年落成以来&#xff0c;一直是多功能的市政要道。大桥北侧连接供气管道&#xff0c;右侧则是城市供水管道&#xff0c;而桥底则设有蓝藻环保监测点。这意味着一旦此桥出现问题&#xff0c;其影响远超交通堵塞的层面。近年来&#…

electron打包前端项目

1.npm run build 打包项目文件到disk文件夹 2.安装electron:npm install electron 打开后进到/dist里面 然后把这个项目的地址配置环境变量 配置环境变量&#xff1a;在系统变量的path中添加进去 配置成功后&#xff0c;electron -v看看版本。 3.创建主程序的入口文件main.…

本地写的Bash脚本,Linux端运行报错:/bin/bash^M: bad interpreter: No such file or directory

背景 在本地写了个Bash Shell脚本&#xff0c;但上传到Linux端后加完权限执行时报错&#xff1a; &#xff08;脚本名&#xff1a;script.sh&#xff09; -bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 分析 这个错误通常是由于脚本文件的行…

【机器学习:Recommendation System】推荐系统

推荐系统&#xff08;或推荐系统&#xff09;是一类机器学习&#xff0c;它使用数据来帮助预测、缩小范围并在呈指数级增长的选项中找到人们正在寻找的内容。 【机器学习&#xff1a;Recommendation System】推荐系统 什么是推荐系统&#xff1f;用例和应用电子商务与零售&…

如何通过代理IP安全使用Linkedln领英?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

【信息系统项目管理师】--【信息技术发展】--【现代化创新发展】--【大数据】

文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.3 大数据1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下&#xff0c;获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看&#xff0c…

C语言:数据在内存中的存储

C语言&#xff1a;数据在内存中的存储 整数存储原码、反码、补码转换规则数据与内存的关系 大小端字节序浮点数存储IEEE 754标准存储过程取用过程 数据的存储范围 整数存储 原码、反码、补码 整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位…

【Linux】进程间通信之共享内存

文章目录 引入共享内存的原理共享内存的相关接口shmget()shmat()shmdt()shmctl() 共享内存的简单使用共享内存的特点 引入 进程间通信&#xff0c;顾名思义就是一个进程和另一个进程之间进行对话&#xff0c;以此完成数据传输、资源共享、通知事件或进程控制等。 众所周知&am…

Nodejs基于vue的个性化服装衣服穿搭搭配系统sprinboot+django+php

本个性化服装搭配系统主要根据用户数据信息&#xff0c;推荐一些适合的搭配穿搭&#xff0c;同时&#xff0c;用户也可自己扫描上传自身衣物以及输入存放位置&#xff0c;搭配后存储到“我的搭配”中&#xff0c;以便下次挑选&#xff0c;既可以节省搭配时间&#xff0c;也方便…

Java-Safe Point(安全点)

虽然安全点的概念和垃圾回收相关&#xff0c;但是概念还是比较独立的&#xff0c;所以本文是从这篇文章Java-虚拟机-垃圾收集器/垃圾收集算法/GCROOT根中抽出来的 安全点safe point 当执行垃圾回收&#xff08;GC&#xff09;的时候&#xff0c;不是立马就执行的&#xff0c;…

Stable Video Diffusion(SVD)视频生成模型发布 1.1版

前言 近日&#xff0c;随着人工智能技术的飞速发展&#xff0c;图像到视频生成技术也迎来了新的突破。特别是Stable Video Diffusion&#xff08;SVD&#xff09;模型的最新版本1.1&#xff0c;它为我们带来了从静态图像生成动态视频的全新能力。本文将深入解析SVD 1.1版本的核…

Vue3使用JSX/TSX

文章目录 1. 什么是 JSX & TSX?JSX&#xff08;JavaScript XML&#xff09;TSX&#xff08;TypeScript XML&#xff09; 2.Vue3 中使用 TSX基本渲染 & 响应式 & 事件 3.JSX 和 template 哪个好呢&#xff1f;总结 1. 什么是 JSX & TSX? 提示&#xff1a;JSX…

【K8s】初识PV和PVC

​ 目录 收起 O、致谢 一、前言 二、Volume 2.1 什么是Volume 2.2 为什么要引入Volume 2.3 Volume类型有哪些 2.4 Volume如何使用 2.4.1 通过emptyDir共享数据 2.4.2 使用HostPath挂载宿主机文件 2.4.3 挂载NFS至容器 三、PV和PVC 3.1 什么是PV和PVC 3.2 为什么要引入PV和PVC 3…

【QT+QGIS跨平台编译】之五十九:【QGIS_CORE跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、处理方法三、涉及到的文件四、宽字节与多字节问题五、字符转换处理一、字符串错误 常量中有换行符错误: 也有const char * 到 LPCWSTR 转换的错误 二、处理方法 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 三、涉及到的文件 src…

学习JAVA的第九天(基础)

目录 接口 定义 使用 特点 注意事项 内部类 分类 内部类的访问特点 成员内部类 格式 获取成员内部类对象方式 静态内部类 格式 局部内部类 特点 匿名内部类 格式 格式解释 作用 接口 接口可以说是一种规则&#xff0c;是对行为的抽象 定义 publi…

数据结构界的幻神(First)----链表

一.链表的概念 链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。链表的结构类似于一条链子&#xff0c;因此得名。 相比于传统的数组&#xff0c;链表具有以下特点&#xff1a; 1. 动态增长&#xff1a; 链表的…

J17资本合伙人SKY LAI确认出席Hack .Summit() 2024区块链开发者盛会

J17资本合伙人SKY LAI确认出席由 Hack VC 主办&#xff0c;并由 AltLayer 和 Berachain 联合主办&#xff0c;与 SNZ 和数码港合作&#xff0c;由 Techub News 承办的Hack.Summit() 2024区块链开发者盛会。 J17资本合伙人SKY LAI负责管理公司的Web3基金&#xff0c;投资领域涵盖…

vivo 在离线混部探索与实践

作者&#xff1a;来自 vivo 互联网服务器团队 本文根据甘青、黄荣杰老师在“2023 vivo开发者大会"现场演讲内容整理而成。 伴随 vivo 互联网业务的高速发展&#xff0c;数据中心的规模不断扩大&#xff0c;成本问题日益突出。在离线混部技术可以在保证服务质量的同时&…