跨平台命令行抓包工具 gaze 介绍

跨平台命令行抓包工具 gaze 介绍

gaze 是什么

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

能做网络抓包的工具很多, 例如 tcpdump 和 wireshark, 为什么还要重写一个? gaze 工具的初衷是为了提高业务联调的效率. 之前在项目中使用过 wireshark 和它的 Lua 插件, 但是在 Linux 下使用不方便. 而 tcpdump 客户端在 Windows 下也不太方便使用, 所以会有这个需求.

gaze 的底层使用了 winpcap 和 libpcap, 是一个跨平台的实现(在 Windows 下使用 mingw 编译). 整个代码除了三方库之外大概也就几百行, 修改和扩展都非常方便. 重要的是, gaze 借鉴了 wireshark, 支持插件扩展(动态链接库). 如果业务使用的协议支持反射(例如 protobuf), 可以很容易做到在修改代码更新插件.

gaze 的实现

gaze 的实现很简单, 通过 libpcap 或者 winpcap 抓取到网卡设备的数据包, 模拟协议栈重新组包和解包即可:

IP 报文不做 DF, 是因为 TCP 的 MSS 基本上会保证 IP 层不分片, 所以这里就直接忽略了, 不然逻辑会比较复杂.

业务层判断连接建立, 断开, 收发包, 都是根据 TCP 的 flags 来判断的, 发包一定是等到收到对端的 ack, 所以会有小小的延迟.

gaze 插件开发

gaze 通过载入动态链接库插件, 来满足不同业务的需求. gaze 插件需要实现下面4个导出接口:

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 的启动参数

没有使用 libpcap 或者 winpcap 的谓词语法, 纯粹只是使用习惯.

假设业务开发的插件名字是 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.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

HTTP/2 服务器推送(Server Push)

HTTP/2 协议的主要目的是提高网页性能。 头信息(header)原来是直接传输文本,现在是压缩后传输。原来是同一个 TCP 连接里面,上一个回应(respo...

36760
来自专栏知晓程序

开发 | 拒绝打开就授权!小程序如何用新能力获取用户资料?

简单来说,这次能力更新,为 button 组件的 open-type 属性赋予了新的有效值 getUserInfo(声明需要获取用户信息)。

36930
来自专栏一“技”之长

使用Express快速搭建前端项目框架 原

    Express是基于Node.js的前端Web开发框架,使用其可以简洁快速的创建健壮友好的API服务。在前端或移动端的开发过程中,可以借助Express...

12810
来自专栏逸鹏说道

前端:图文混排-怎么在不使用float的情况下实现想要的效果呢?

异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 举个例子 ? 重点:display:fle...

333110
来自专栏JavaEdge

Maven环境隔离解决的问题配置及原理目录初始化编译打包命令验证

解决的问题 避免人工修改的弊端,即容易犯错 轻松分环境编译,打包,部署 配置及原理 在pom.xml中增加build节点 ? 在pom.xml中增加pro...

44560
来自专栏从零开始学自动化测试

Fiddler抓包3-查看get与post请求

前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据。 本篇以博客园的请求为例,简单分析get...

42960
来自专栏主机笔记

使用xshell连接linux服务器

许多新手第一次买了服务器都不知道该怎样使用,尤其是没有接触过linux的朋友对命令行界面几乎不了解,主机笔记今天就记录下使用国外软件xshell连接linux服...

1.1K80
来自专栏学海无涯

iOS开发之使用Git的基本使用(二)

通过前文iOS开发之使用Git的基本使用(一)的学习,相信大家对如何将iOS项目通过Git传到GitHub账户上有了一个基本的了解,其过程是相对繁琐和容易出错的...

7620
来自专栏程序员的知识天地

Vue开发环境搭建全过程,一步一个坑

Vue这里就不多作介绍了,首先我们要安装好整个开发环境,其实Windows和Mac的整个过程基本一样

31010
来自专栏图像识别与深度学习

2018-03-24python3.6.2 Tensorflow环境配置(win10 64位)

18470

扫码关注云+社区

领取腾讯云代金券