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

目录

背景

实现思路

具体实现

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,销售)…

IntelliJ IDEA快捷键大全

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

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

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

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

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

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

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

leetcode经典算法——快速幂

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

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

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

【网络】高级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、…

PCL 计算外接圆的半径

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

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

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

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

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

谱包络之pysptk和pyworld

谱包络之pysptk和pyworld 谱包络可以直接用于语音的合成,常用的两个计算谱包络的库pysptk和pyword。 先看看代码: 一段语音x,采样率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 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:ubuntu 22.04 工具:python 3.10.6 设备:Nvidi…

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

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

SCAU操作系统知识点之(一)计算机系统概述

缩写词: OS: Operating System 操作系统 PSW: Program Status Word 程序状态字 FCFS: First Come First Serve 先来先服务 PCB: Process Control Block 进程控制块 DMA: Direct Memory Access 直接存储器存取 MMU: Memory Management Unit 内存管理单元 SSTF: Short…

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义? 前言 MAUIBlazor其实就是浏览器套壳,我觉得很有意义,因为现在性能已经不是主要的限制了,很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…

了解IL汇编跳转语句

il代码, .assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 5.entrypointldstr "Enter First Number"call void [mscorlib]System.Console::WriteLine (string)call string …

性能优化-react阻止子组件重渲染

因为父组件的状态变更会触发子组件的渲染,可以用shouldComponentUpdate或memo来阻止。下面就来介绍这两种方法。 类组件-shouldComponentUpdate 注:变化需要在render中打印,在component中检测不到 核心代码: 子组件中用shouldComponentUpda…

图像的缩放之c++实现(qt + 不调包)

1.基本原理 图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法 1.最临近插值法 将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标…

Vue.js2+Cesium1.103.0 八、动态光墙效果

Vue.js2Cesium1.103.0 八、动态光墙效果 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"/> </template><script> /* eslint-disable no-undef */ import /utils/dynamicWallMaterialProperty.js exp…