golang抓取tcp包的实现

要抓取 TCP 请求的数据包,你可以使用 `golang` 中的 `packet` 库和 `pcap` 库。下面是一种使用这些库来抓取 TCP 数据包的方法:

首先,确保已经安装了 `pcap` 库,可以使用以下命令来安装:
```
go get -u github.com/google/gopacket
```

接下来,可以使用以下代码来抓取 TCP 数据包:

package mainimport ("fmt""log""os""time""github.com/google/gopacket""github.com/google/gopacket/pcap"
)func main() {// 获取接口名称,例如 "eth0" 或 "en0"device := os.Args[1]// 打开设备handle, err := pcap.OpenLive(device, 1600, true, pcap.BlockForever)if err != nil {log.Fatal(err)}defer handle.Close()// 设置过滤规则,只抓取 TCP 数据包err = handle.SetBPFFilter("tcp")if err != nil {log.Fatal(err)}// 开始捕获数据包packetSource := gopacket.NewPacketSource(handle, handle.LinkType())for packet := range packetSource.Packets() {// 获取 TCP 数据包tcpLayer := packet.Layer(gopacket.LayerTypeTCP)if tcpLayer != nil {tcpPacket := tcpLayer.(*gopacket.TCP)// 打印源地址、源端口、目标地址、目标端口fmt.Printf("源地址: %s:%d\n", packet.NetworkLayer().NetworkFlow().Src().String(), tcpPacket.SrcPort)fmt.Printf("目标地址: %s:%d\n", packet.NetworkLayer().NetworkFlow().Dst().String(), tcpPacket.DstPort)// 打印 TCP 数据内容fmt.Println("TCP 数据:", string(tcpPacket.Payload))}}// 捕获一段时间后停止抓包time.Sleep(10 * time.Second)handle.Close()
}

这个示例代码打开指定的网络接口,设置过滤规则为 “tcp”,然后开始捕获 TCP 数据包。对于每个捕获到的数据包,它将检查是否为 TCP 数据包,并打印源地址、源端口、目标地址、目标端口和 TCP 数据的内容。

可以使用以下命令来运行代码,并指定要抓取的网络接口(例如 "eth0" 或 "en0"):
```shell
go run tcp_packet_capture.go <接口名称>
```

请注意,执行此程序需要管理员权限或以 root 身份运行。

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

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

相关文章

C++ 纯虚函数和虚函数的区别

在 C 中&#xff0c;虚函数&#xff08;Virtual Function&#xff09;和纯虚函数&#xff08;Pure Virtual Function&#xff09;都是用于实现多态性的机制&#xff0c;但它们之间有一些关键的不同。 虚函数&#xff08;Virtual Function&#xff09; 定义&#xff1a;在基类…

【深度学习 | 感知器 MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

学会Mybatis框架:一文掌握MyBatis与GitHub插件分页的完美结合【三.分页】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Mybatis分页 1. Mybatis自带分页 2…

如何使用CSS实现一个拖拽排序效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现拖拽排序效果的CSS和JavaScript示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦…

在自定义数据集上使用 Detectron2 和 PyTorch 进行人脸检测

本文讲讲述如何使用Python在自定义人脸检测数据集上微调预训练的目标检测模型。学习如何为Detectron2和PyTorch准备自定义人脸检测数据集&#xff0c;微调预训练模型以在图像中找到人脸边界。 人脸检测是在图像中找到&#xff08;边界的&#xff09;人脸的任务。这在以下情况下…

基于前端技术原生HTML、JS、CSS 电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式&#xff0c;自由书写&#xff0c;轻松录入。实现病人医疗记录&#xff08;包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。&#xff09;的保存、管理、传输和重现&#xff0c;取代手写纸张病历。不仅实现了纸…

centos7.9和redhat6.9 离线升级OpenSSH和openssl (2023年的版本)

升级注意事项&#xff01; 1、多开几个连接窗口&#xff08;xshell&#xff09;&#xff0c;避免升级openssh失败无法再次连接终端&#xff0c;否则要跑机房了。 2、可开启telnet服务、vnc服务、打快照。多几个“保命”的路数。一、centos7.9的信息 [rootnode2 ~]# openssl v…

Socket通信与WebSocket协议

文章目录 目录 文章目录 前言 一、Socket通信 1.1 BIO 1.2 NIO 1.3 AIO 二、WebSocket协议 总结 前言 一、Socket通信 Socket是一种用于网络通信的编程接口&#xff08;API&#xff09;&#xff0c;它提供了一种机制&#xff0c;使不同主机之间可以通过网络进行数据传输和通信…

为什么ESbuilld打包构建比较快?

语言优势 大多数前端打包工具是基于javascript实现的&#xff0c;而Esbuild选择使用Go语言编写。 在CPU密集的场景下&#xff0c;Go更加具有性能优势。 因为javascript本质上是一门解释型的语言&#xff0c;每次执行的时候都会先将源码翻译成机器码&#xff0c;一边调度执行&a…

HQL解决连续三天登陆问题

1.背景 统计连续登录天数超过3天的用户&#xff0c;输出信息包括&#xff1a;用户id&#xff0c;登录天数&#xff0c;起始时间&#xff0c;结束时间&#xff1b; 2.准备数据 -- 建表 create table if not exists user_login_3days(user_id STRING,login_date date );--插入…

14、缓存预热+缓存雪崩+缓存击穿+缓存穿透

缓存预热缓存雪崩缓存击穿缓存穿透 ● 缓存预热、雪崩、穿透、击穿分别是什么&#xff1f;你遇到过那几个情况&#xff1f; ● 缓存预热你是怎么做到的&#xff1f; ● 如何避免或者减少缓存雪崩&#xff1f; ● 穿透和击穿有什么区别&#xff1f;它两一个意思还是截然不同&am…

JDBC详解

文章目录 一、引言1.1 如何操作数据库1.2 实际开发中&#xff0c;会采用客户端操作数据库吗&#xff1f; 二、JDBC&#xff08;Java Database Connectivity&#xff09;2.1 什么是 JDBC&#xff1f;2.2 JDBC 核心思想2.2.1 MySQL 数据库驱动2.2.2 JDBC API 2.3 环境搭建 三、JD…

面试官:请手写一个Promise

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 前言 面试官&#xff1a;请手写一个Promise&#xff1f;&#xff08;开门见山&#xff09; 我&#xff1a;既然说到Promise&#xff0c;那我肯定得先介…

RabbitMQ介绍

RabbitMQ的概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑 RabbitMQ 是 一个快递…

基于 Debian 12 的MX Linux 23 正式发布!

导读MX Linux 是基于 Debian 稳定分支的面向桌面的 Linux 发行&#xff0c;它是 antiX 及早先的 MEPIS Linux 社区合作的产物。它采用 Xfce 作为默认桌面环境&#xff0c;是一份中量级操作系统&#xff0c;并被设计为优雅而高效的桌面与如下特性的结合&#xff1a;配置简单、高…

微信开发之一键修改群聊备注的技术实现

修改群备注 修改群名备注后&#xff0c;如看到群备注未更改&#xff0c;是手机缓存问题&#xff0c;可以连续点击进入其他群&#xff0c;在点击进入修改的群&#xff0c;再返回即可看到修改后的群备注名&#xff0c;群名称的备注仅自己可见 请求URL&#xff1a; http://域名地…

ctfshow-红包题第二弹

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 同样&#xff0c;先看一下有没有注释的内容&#xff0c;可以看到有一个cmd的入参 执行之后可以看到文件代码&#xff0c;可以看到也是eval&#xff0c;但是中间对大部分的字符串都进行了过滤&#xff0c;留下了…

lvs实现DR模型搭建

目录 一&#xff0c;实现DR模型搭建 1&#xff0c; 负载调度器配置 1.1调整ARP参数 1.2 配置虚拟IP地址重启网卡 1.3 安装ipvsadm 1.4 加载ip_vs模块 1.5 启动ipvsadm服务 1.6 配置负载分配策略 1.7 保存策略 2&#xff0c; web节点配置 1.1 调整ARP参数 1.2 配置虚拟I…

Element Plus <el-table> 组件之展开行Table在项目中使用

目录 官方样式&#xff1a; 展开前&#xff1a; 展开&#xff1a; 原始代码&#xff1a; 代码详解&#xff1a; 项目使用场景&#xff1a; 完成效果&#xff1a; 具体实现范本&#xff1a; 1.调整数据结构 2. 修改标签和数据绑定 3. JavaScript 部分导入和创建对象 …

综合能源系统(8)——综合能源系统支撑技术

综合能源系统关键技术与典型案例  何泽家&#xff0c;李德智主编 1、大数据技术 1.1、大数据技术概述 大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高…