轻量级的跨平台网络包监听工具,支持自定义插件
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
dlfcn
include
libpcap
src
winpcap
.gitignore
LICENSE
Makefile
README.md

README.md

gaze

gaze是什么

gaze是一个命令行下的轻量级网络包监听工具, 有颜色显示, 跨平台(linux & windows), 支持TCP协议, 支持自定义插件.


为什么是gaze

能做网络抓包的工具很多, 例如tcpdump和wireshark, 为什么还要自己写一个?

gaze具的初衷是为了业务联调提高效率. 之前使用过wireshark和它的lua插件, 但是在linux下使用不方便, 而tcpdump客户端在windows下又没法用, 所以会有这个诉求.


gaze的优点

跨平台, gaze使用了winpcap和libpcap, 是一个跨平台的实现, windows下用mingw编译, 方便前后端同事开发联调.

轻量, 整个代码除去了少量的第三方库, 也就千余行代码, 修改和扩展方便.

插件化开发, 接口简单, 只要根据业务需要实现导出的4个接口.


gaze启动参数

--tcp "tcp packets"
--udp "udp packets"
--eth "device name, default use first eth device"
--plugin "plugin shared library name"
--ip
--debug "print ip & tcp level debug info"
--port
--help "show usage"

为什么没有使用libpcap或者说tcpdump的谓词语法, 纯粹只是使用习惯的问题, 更习惯linux的风格.

假设业务开发的插件名字是polar.dll, server的监听地址是tcp://10.1.164.54:7000, 可以用下面的命令来监听:

./gaze --tcp --port 7000 --ip 10.1.164.54 --plugin polar.dll

如果本地是多网卡的话, 并且需要监听的网卡不是默认的, 则可以用下面的命令来查看所有网卡设备:

./gaze --eth

在linux下监听需要以root启动gaze.


业务插件开发

如上面usage所示, 业务可以制定一个plugin参数, 这个plugin实际上是实现了下面接口(按需)的动态链接库, 进而解析解析业务的自定义协议. (link_key_t的类型在gaze.h中定义)

  • void OnSend(link_key_t* key, const char* buffer, int len);
  • void OnRecv(link_key_t* key, const char* buffer, int len);
  • void OnBuild(link_key_t* key);
  • void OnFinish(link_key_t* key);

需要注意的是, 为了保证跨平台可用, 我们需要将插件分别在linux下编译成so, 在windows下编译成dll.


最后

gaze是在断断续续的工作之余完成的, 难免会有bug和各种todo, 请轻拍, 非常欢迎一起完善它.