介绍
抓取项目中如:mysql,redis,mongodb,http等,数据库请求或者网络请求,命令行展示。工作中一直用于抓取项目中的数据库sql语句\redis语句等,便于调试。个人推荐用它来抓mysql的请求,可以清晰地看到各种sql语句。
支持协议:
mysql
redis
mongodb
http
github地址
https://github.com/40t/go-sniffer
安装过程中遇到的问题
1、下载go-sniffer时提示command not found
go get -v -u github.com/40t/go-sniffer
百度查到的结果是可能是因为服务器没有安装golang,golang安装命令如下
yum install golang -y
2、安装完golang之后再执行上述命令,提示内容变了
请教了公司的运维小哥哥,他怀疑是该服务器所在网络请求不了github,并不是我的原因。然后他通过另一个网络下载了go-sniffer的安装包并且安装好了。安装目录是/usr/local/bin/go-sniffer
3、然后我开始执行帮助命令,然而还是没出现我期待的界面,又提示找不到命令
go-sniffer --help
又请教运维小哥哥,他截图了他执行的结果给我,是正常的,但是我留意到他执行的命令与我的有所不同,这是他执行的命令
/usr/local/bin/go-sniffer --help
同一个服务器,我用的还是root权限的用户,怎么我执行就不行呢?急于看到效果,我改成了与他完全相同的命令,在go-sniffer前加上目录,通通都可以正常执行了。
/usr/local/bin/go-sniffer --help
/usr/local/bin/go-sniffer --dev
/usr/local/bin/go-sniffer --list
但是我不甘心,我百度了很久,说是环境变量问题,我就重新配置了环境变量,还是没解决。终于找到了一个靠谱的说法,说可能是切换用户的时候,没有切换工作目录,造成了这个问题。
我每次使用的是
sudo su
而不是
sudo su -
区别是,前者只切用户,不切工作目录,后者同时会切工作目录。
所以我退出之后重新切换到了root用户,再执行上述命令,终于看到了期待的界面。
事实证明,我的linux基础实在是太薄弱了,以至于遇到很多问题,不知道从何下手,好好地拾起linux吧!
4、一切工作准备就绪我开始尝试抓mysql的数据包
然后执行完命令之后,刷新页面或者通过界面创建业务数据,服务端都没任何动静
go-sniffer lo mysql
继续百度,留意到go-sniffer抓的网关的数据包,通过go-sniffer --dev查询到了两个设备地址,一个不行,那就换一个呗,于是我输入了以下命令,再进行界面上的创建操作
go-sniffer eth0 mysql
然后奇迹出现了,打印出了一堆清晰的sql语句,无比激动!
5、然后我又尝试抓redis的数据包
go-sniffer eth0 redis
但是令人失望的是,无论怎么请求必然会产生redis请求的页面,服务端这边都不打印任何东西。我有留意到go-sniffer --help里面对它的用法的解释,还有一个插件端口的参数,所以我怀疑是不是端口抓的不对的问题,于是根据文档,找到了目前我们服务器上redis配置的端口,输入了如下命令。
go-sniffer eth0 redis -p 98763
之后看到界面疯狂地输出了redis的操作请求。
反思为什么抓取mysql的请求是不指定端口都能成功抓取呢,因为go-sniffer默认是抓mysql的3306端口的,而我们的配置也是使用的3306,所以自然而然就能抓到啦。
有疑问加站长微信联系(非本文作者)