社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

工具|MySQL、Redis、MongoDB网络抓包工具

Android编程精选 • 2 年前 • 249 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇


作者丨jyzhou 

来源丨Java研发军团

简介

go-sniffer 可以抓包截取项目(MySQL、Redis、MongoDB)中的请求并解析成相应的语句,并格式化输出。类似于在之前的文章 MySQL抓包工具:MySQL Sniffer中介绍的mysql-sniffer。而 go-sniffer 可以对更多数据库进行抓包分析,现在来介绍在什么情况下会使用该工具的。

使用

下载:

github 地址:https://github.com/40t/go-sniffer

安装:

安装依赖包:

Centos:

yum -y install libpcap-devel

Ubuntu:

apt-get install libpcap-dev

另外还需要安装golang,并且版本需要在1.10.3以上。

wget https://golang.org/dl/go1.10.3.linux-amd64.tar.gz

设置好相关的环境变量。如果不想要go环境 ,则可以直接在其他地方安装好go-sniffer之后,复制到目标服务器上直接使用。

下载安装

-- 安装好go环境的服务器上:

go get -v -u github.com/40t/go-sniffer cp -rf $(go env GOPATH)/bin/go-sniffer /usr/local/bin

--安装到设置好的go环境变量的目录里 go-sniffer

参数说明:go-sniffer --help

[使用说明]

    go-sniffer [设备名] [插件名] [插件参数(可选)]

    [例子]
          go-sniffer en0 redis          抓取redis数据包
          go-sniffer en0 mysql -p 3306  抓取mysql数据包,端口3306

    go-sniffer --[命令]
               --help 帮助信息
               --env  环境变量
               --list 插件列表
               --ver  版本信息
               --dev  设备列表
    [例子]
          go-sniffer --list 查看可抓取的协议

=======================================================================
[设备名] : lo0 :   127.0.0.1
[设备名] : en0 : x:x:x:x:x5:x  192.168.1.3
[设备名] : utun2 :   1.1.11.1

语法:

$ go-sniffer lo0 mysql 
$ go-sniffer en0 redis 
$ go-sniffer eth0 http -p 8080
$ go-sniffer eth1 mongodb


使用场景

一 Redis :审计、发现热点key

关于Redis的知识点就不说了,主要来说明如何使用go-sniffer来抓包分析。如果想发现哪个key的操作比较多或则是否存在热点key,在Redis4.0之前没有什么好办法(4.0之后的LFU可以查看hotkey),只有通过统计各个客户端发来的命令进行统计。虽然monitor可以看到某一刻的key操作,但是该命令消耗巨大,可能会造成客户端缓冲区溢出。并且也没有合适的插件来进行实现。即使有的话,对Redis的性能肯定有一定的损耗,所以只有监控其网络来分析操作是对Redis服务的影响最小的。如对一个实例进行监控:

go-sniffer eth0 redis -p 6379 >> out.log 对通过eth0网卡的客户端访问端口为6379的Redis服务进行抓包,并把信息写到文件中。该文件的日志格式:

tcp and port 6379 get abc
 get abc
 get abc
 get abc
 get opq
 get opq
 get opq
 get opq
 get xyz
 get xyz
 get xyz

可以看到,该文件的信息就是操作日志,最后可以通过使用awk来分析,也可以把该日志文件写入到数据库的表里进行统计分析:

grep -avEi "^#|^$|^tcp|^ INFO|^ AUTH|^ REPLCONF ACK|^ CONFIG GET" out.txt |awk '{print $1,$2}'|sort| uniq -c | sort -nr |head -n 10
      5 get abc
      4 get opq
      3 get xyz

注意:go-sniffer也需要消耗一定的资源,大致的消耗可以看以下表格:

OPSRedis CPUsniffer CPU
1.2W20%30%
5.5W80%140%
7.5W98%180%

从上面看到,go-sniffer所需要的CPU资源是Redis的2倍左右。所以,在使用该工具之前,先判断本身服务器的资源是否够用。

二 MySQL:审计

go-sniffer eth0 mysql -p 3306 >> out.log

三 MongoDB:审计

go-sniffer eth0 mongodb -p 27017 >> out.log

  

  来源:https://www.cnblogs.com/zhoujinyi/p/15343188.html

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/125291
 
249 次点击