# Sniff **Repository Path**: ridedi/Sniff ## Basic Information - **Project Name**: Sniff - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-10 - **Last Updated**: 2021-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 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, 请轻拍, 非常欢迎一起完善它.