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

目录

背景

实现思路

具体实现

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.rhkb.cn/news/84367.html

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

相关文章

IDEA快捷键总结

切换窗口 Alt(1-9) Alt1 打开或者关闭左侧project Alt4 Run窗口 Alt5 Debug窗口 Alt7 类结构窗口 生成构造函数、get、set等方法 Altinsert 快速生成输出语句 Soutenter键 运行程序 chtlshiftf10 运行程序 shiftf9 debug方式运行程序 代码…

汽车控制器底层软件BOOTLOADER开发经历

引言 现在所谓智能汽车必备的OTA技术,在ECU控制器层面就是BOOT的开发,对应autosar体系里面的BSW基础软件。 同学刚开始接触汽车软件开发会有一种思想,要学就学听起来high level的autosar,但是到底autosar是个什么东西也搞不懂&am…

排序的介绍

排序算法介绍 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列 粗暴理解 将杂乱无章的数据元素,通过一定的方法按照关键字顺序排列的过程叫做排序 排序分内部排序和外部排序,若整个排序过程不需…

Java算法_ LRU 缓存(LeetCode_Hot100)

题目描述:请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 import java.util.HashMap; import java.util.Map;/*** 2 * Author: L…

Effective Java笔记(26)请不要使用原生态类型

首先介绍一些术语 。 声明中具有一个或者多个类型参数( type parameter )的类或者接口,就是泛型( generic )类或者接口 。 例如,List 接口就只有单个类型参数 E ,表示列表的元素类型 。这个接口…

竞赛项目 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 …

freeswitch的mod_xml_curl模块动态获取dialplan

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 mod_xml_curl模块支持从web服务获取xml配置,本文介绍如何动态获取dialplan配置。 环境 centos:CentOS release 7.0 (Final)或以上版本 freeswitch:v1.6.20 GCC:4.8.5…

【HarmonyOS】Java如何引用外部jar包

【关键字】 Java、引用jar包​ 【写在前面】 使用API6和API7开发HarmonyOS应用时,因为应用中只能引用SDK中开放的功能接口,但是部分jdk自带的接口功能在SDK中并未封装,要想在工程中使用jdk开放的接口功能,需要将jdk中的jar包通过…

科技资讯|苹果手机版Vision Pro头显专利曝光,内嵌苹果手机使用

根据美国商标和专利局(USPTO)公示的清单,苹果公司近日获得了一项头显相关的技术专利,展示了一款亲民款 Vision Pro 头显,可以将 iPhone 放置在头显内部充当屏幕。 根据patentlyapple 媒体报道,这是苹果公司…

1.RuoYi-Vue前后端分离版本启动

1.代码下载 去若依官网,选择RuoYI前后端分离版: 下载地址:https://gitee.com/y_project/RuoYi-Vue 2.依赖环境的部署 1.Mysql 2.Redis安装部署 : https://blog.csdn.net/qq_27860623/article/details/132168382 3.Idea打开后端服务 用Idea打开后端的…

计算机服务器被360后缀勒索病毒攻击怎么办,勒索病毒解密

计算机技术的不断发展,不仅方便了企业的生产生活,也为社会的发展带来了巨大贡献,但随之而来的网络威胁也不断增加,勒索病毒就是其中较为常见的常见的威胁。近期,我们收到很多企业的求助,企业的计算机服务器…

Qt应用开发(基础篇)——堆栈窗口 QStackedWidget

一、前言 QStackedWidget继承于QFrame,QFrame继承于QWidget,是Qt常用的堆栈窗口部件。 框架类QFrame介绍 QStackedWidget堆栈窗口,根据下标切换,一次显示一个小部件,常用于应用界面切换、图片轮询播放等场景。 二、QSt…

Unity-Shader-高亮Highlight

常用Shader-高亮,可动态调整高亮颜色、高亮强度范围/等级、高亮闪烁速度、高亮状态 Shader "CustomShader/Highlight" {Properties{_Color("Color", Color) (0.9044118,0.6640914,0.03325041,0)_Albedo("Albedo", 2D) "white…

Stable Diffusion - Candy Land (糖果世界) LoRA 提示词配置与效果展示

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132145248 糖果世界 (Candy Land) 是一个充满甜蜜和奇幻的地方,由各种各样的糖果和巧克力构成。在糖果世界,可以看到&…

全网最细,Fiddler修改接口返回数据详细步骤实战,辅助接口测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在测试的过程中&a…

年之年的选择,组装版

组件&#xff1a;<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 时间选择年 - 年 --> <template><div class"year-range-pick…

Nacos服务治理—负载均衡

引入负载均衡 在消费方引入负载均衡机制&#xff0c;同时简化获取服务提供者信息的流程 Spring Cloud引入组件LoadBalance实现负载均衡 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web<…

MyBatis-动态SQL-foreach

目录 标签有以下常用属性&#xff1a; 小结 <froeach> <foreach>标签有以下常用属性&#xff1a; collection&#xff1a;指定要迭代的集合或数组的参数名&#xff08;遍历的对象&#xff09;。item&#xff1a;指定在迭代过程中的每个元素的别名&#xff08;遍历…

【python 深度学习】解决遇到的问题

目录 一、RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb 二、AttributeError: module ‘tensorflow’ has no attribute ‘flags’ 三、conda 更新 Please update conda by running 四、to search for alternate channels that…

【Spring专题】手写简易Spring容器过程分析

前置知识 《【Spring专题】Spring底层核心原理解析》 思路整理 我们在上一节《【Spring专题】Spring底层核心原理解析》课里面有简单分析过一个Spring容器的一般流程&#xff0c;所以&#xff0c;本节课我们这里尝试写一下简易的Spring容器。 手写源码示例 一、手写前的准…