嗅探抓包工具,解决线上偶现问题来不及抓包的情况阅读目录

目录

背景

实现思路

具体实现

Python 抓包

总结

 资料获取方法


背景

测试群里经常看到客户端的同学反馈发现了偶现Bug,但是来不及抓包,最后不了了之,最近出现得比较频繁,所以写个小脚本解决这个问题。

实现思路

之前写过一个埋点工具,辅助测试埋点的数据,解决多个端的埋点需要打开不同的抓包软件,并且需要肉眼去比对的的不便,也是使用的抓包分析数据并在界面(pyqt5)展示的方式,这一次主要是进行日志的管理,保存请求记录,所以实现的思路比较简单:

  • 抓包
  • 存日志
  • 做日志管理

具体实现

此前使用过优步的号称性能最好的golang日志管理包zap,结合lumberjack对日志的管理特别的方便,几个配置参数就能满足需求,比如一键日志压缩压缩后1M只占20Kb。所以拿来即用,

lumberjack常见的配置参数

参数含义
Filename:// 日志文件路径
MaxSize:// 每个日志文件保存的最大尺寸 单位:M
MaxBackups:// 日志文件最多保存多少个备份
MaxAge:// 文件最多保存多少天
Compress:// 是否压缩, 压缩后1M约占20Kb

Go build 成不同操作系统可执行文件

而且golang可以很简单的把代码编译成不同系统都能执行的程序或者二进制包。

Mac下编译Linux, Windows平台的64位可执行程序:

$ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go  # Mac
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go  # linux
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go  # windows

具体代码

package mainimport ("fmt""os""time""github.com/google/gopacket""github.com/google/gopacket/pcap""go.uber.org/zap""go.uber.org/zap/zapcore""gopkg.in/natefinch/lumberjack.v2"
)var (device            = "en0" // 指定监控网卡名称信息snapshotLen int32 = 10000000promiscuous       = falseerr         errortimeout     = 30 * time.Secondhandle      *pcap.Handle
)func main() {handle, err = pcap.OpenLive(device, snapshotLen, promiscuous, timeout)filter := "host test.baidu.com" // 指定抓取域名err = handle.SetBPFFilter(filter)defer handle.Close()log := initLog()packetSource := gopacket.NewPacketSource(handle, handle.LinkType())for packet := range packetSource.Packets() {applicationLayer := packet.ApplicationLayer()if applicationLayer != nil {log.Info(string(applicationLayer.LayerContents()))}if err := packet.ErrorLayer(); err != nil {fmt.Println("Error decoding some part of the packet:", err)}}
}func initLog() *zap.Logger {hook := lumberjack.Logger{Filename:   "./logs/package.log", // 日志文件路径MaxSize:    10,                   // 每个日志文件保存的最大尺寸 单位:MMaxBackups: 5,                    // 日志文件最多保存多少个备份MaxAge:     7,                    // 文件最多保存多少天Compress:   true,                 // 是否压缩, 压缩后1M约占20Kb}encoderConfig := zapcore.EncoderConfig{TimeKey:        "time",LevelKey:       "level",NameKey:        "logger",MessageKey:     "msg",LineEnding:     zapcore.DefaultLineEnding,EncodeLevel:    zapcore.LowercaseLevelEncoder,  // 小写编码器EncodeTime:     zapcore.ISO8601TimeEncoder,     // ISO8601 UTC 时间格式EncodeDuration: zapcore.SecondsDurationEncoder, //}// 设置日志级别atomicLevel := zap.NewAtomicLevel()atomicLevel.SetLevel(zap.InfoLevel)core := zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConfig),                                        // 编码器配置zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&hook)), // 打印到控制台和文件atomicLevel, // 日志级别)logger := zap.New(core)logger.Info("log 初始化成功")return logger
}

Python 抓包

Python使用scapy也能很简单的完成抓包操作:

from scapy.all import *def _print(_packet):"""指定抓包信息打印规则:param _packet: :return: """return "\n".join(("\n".join(_packet.sprintf("{Raw:%Raw.load%}").split(r"\r\n")),))sniff(iface='en0',prn=_print,filter="host test.baidu.com"  # 指定过滤域名
)

配上日志管理模块也能很快的完成实现。

总结

抓包,日志管理。


 资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

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

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

相关文章

02Mysql之多表查询--例题讲解

一、题目详情,以及表的建立 新增员工表emp和部门表deptcreate table dept (dept1 int ,dept_name varchar(11));create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int);insert into dept values(101,财务),(102,销售)…

Go语言模板语法

Go语言模板语法 文章目录 <center> Go语言模板语法连接前后端的符号: {{}}注释管道(pipeline)变量条件判断range 关键字with 关键字比较函数自定义函数嵌套模板模板继承 连接前后端的符号: {{}} 模板语法都包含在{{}}之中,其中{{.}}中的.表示当前对象.在传入一个结构体对…

IntelliJ IDEA快捷键大全

文章目录 1、构建/编译2、文本编辑3、光标操作4、文本选择5、代码折叠6、辅助编码7、上下文导航8、查找操作9、符号导航10、代码分析11、运行和调试12、代码重构13、全局 CVS 操作14、差异查看器15、工具窗口 本文参考了 IntelliJ IDEA 的官网&#xff0c;列举了IntelliJ IDEA&…

Jmeter 配置环境变量,简明教程专享

通过给 JMeter 配置环境变量&#xff0c;可以快捷的打开 JMeter&#xff1a; 打开终端。执行 jmeter。 配置环境变量的方法如下。 Mac 和 Linux 系统 在 ~/.bashrc 中加如下内容&#xff1a; export JMETER_HOMEJMeter所在目录 export PATH$JAVA_HOME/bin:$PATH:.:$JMETER…

记录一下shardingsphere-jdbc查询分表使用union all的低级错误

使用shardingsphere-jdbc查询犯的低级错误&#xff0c;union all 字段没对齐&#xff0c;导致分片值有空值或数据不对&#xff0c;分片结果不对 有个数据同步的功能&#xff0c;对应的表使用到了shardingsphere-jdbc进行分表&#xff0c;所以想着是用shardingsphere-jdbc取数据…

Unity3D高级编程:主程手记学习1

第一章 软件架构 Untiy 分层设计 分层后再分治

leetcode经典算法——快速幂

实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 暴力方法肯定是循环循环n次&#xff0c; 每一次*x 显然此方法遇到大的数字会超时 那么我们要引进一个思想&#xff0c;快速幂算法 例如&#xff1a; x^97 我们可以看出&a…

Harbor内网离线安装使用HTTPS访问

重要提醒&#xff1a;使用的是域名形式访问Harbor。通过https://harbor.top访问网址。 1、首先在自己windows电脑 “此磁盘C->Windows->System32->drivers->etc” 修改hosts文件 添加“ip harbor.top”例如&#xff1a;“172.33.33.33 harbor.top” 2、进入内网服务…

CGroupAndroid实践篇】三、Android CGroup控制组初始化

前面已经提到,android在init阶段,通过init trigger来触发控制组节点的创建,包括foreground,background,top-app,rt,system,dex2opt,system-background,nnapi-hal,camera-daemon,restricted等。 我们来看下android在init.rc中,是如何创建这些控制组节点的,如下:…

python一点通:类继承如何设计得更简洁

在使用Python的面向对象编程时&#xff0c;我们经常遇到这样的情况&#xff1a;子类需要被设计得能够处理其父类的任何更改或添加&#xff0c;而不需要持续的调整。这种情况经常出现在类的 init 方法中&#xff0c;尤其是在处理继承时。 为了优雅地处理这种情况&#xff0c;Py…

c#设计模式-创建型模式 之 单例模式

目录 前言&#xff1a; 优点&#xff1a; 缺点: 饿汉式&#xff08;静态变量方式&#xff09; 懒汉式&#xff08;线程不安全&#xff09; 懒汉式&#xff08;双重检查锁定&#xff09; 推荐方式Lazy 总结&#xff1a; 前言&#xff1a; 这种模式涉及到一个单一的类&a…

23款奔驰C260升级原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶&#xff0c;可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出&#xff0c;并且在关闭后能够立刻散去。车内气味不会永久改变&#xff0c;香氛…

【网络】高级IO

目录 一、五种IO模型 1、阻塞IO 2、非阻塞IO 3、信号驱动 4、IO多路转接 5、异步IO 6、总结 二、高级IO重要概念 1、同步通信与异步通信 2、阻塞 vs 非阻塞 三、非阻塞IO 1、fcntl 2、实现函数SetNoBlock 四、IO多路转接select 1、select 1.1、参数解释 1.2、…

计算机网络中的一些基本概念

IP地址: 址用于定位主机的网络地址。是一个32位的二进制数&#xff0c;通常被分割为4个“8位二进制数”&#xff08;也就是4个字节&#xff09;.**端口号:**在网络通信中&#xff0c;IP地址用于标识主机网络地址&#xff0c;端口号可以标识主机中发送数据、接收数据的进程。简单…

PCL 计算外接圆的半径

目录 一、算法原理1、计算公式2、主要函数3、源码解析二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 1、计算公式

机器学习笔记:李宏毅chatgpt 大模型 大资料

1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models&#xff0c;Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好&#xff0c;而是在某一个瞬间&#xff0c;模型“顿悟”了 这边举的一个例子是&#…

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例

目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是&#xff1a; DFA&#xff08;确定性有限状态自动机&#xff09; NFA&#xff08;非确定性有限状态自动机&#xff09; 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…

谱包络之pysptk和pyworld

谱包络之pysptk和pyworld 谱包络可以直接用于语音的合成&#xff0c;常用的两个计算谱包络的库pysptk和pyword。 先看看代码&#xff1a; 一段语音x&#xff0c;采样率16000Hz pysptk import pysptkframe_length 1024 hop_length 80 order 25 alpha 0.41 frames libro…

ubuntu python 查看系统是否可用 cuda

ubuntu python 查看系统是否可用 cuda 初环境与设备查看环境演示效果 本篇文章将介绍ubuntu python 查看系统是否可用 cuda 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统&#xff1a;ubuntu 22.04 工具&#xff1a;python 3.10.6 设备&#xff1a;Nvidi…

哪些人会看作业指导书?作业指导书怎样才能发挥作用?

一般人普遍人为&#xff0c;作业指导书就是给操作人员看的。其实不然&#xff0c;那么哪些人会看作业指导书&#xff1f;大致可以分为: 第一类&#xff1a;新到工作岗位的员工。其中包括新进员工和新转岗位的员工&#xff0c;他们都会在师傅或领班组长的带领指导下&#xff0c;…