使用 libpcap 分析网络报文 (2)

这里打算写写报文分析接口的设计。 一般来说,以太网的报文格式为:

+------------+-------------------+-----+
| eth header | ip/arp/... header | ... |
+------------+-------------------+-----+

例如手机上的一次网页请求的报文格式可能像下面这样:

+-----+----+-----+-----+----+-----+--------------+
| eth | ip | udp | gtp | ip | tcp | http request |
+-----+----+-----+-----+----+-----+--------------+

不同的应用对于不同协议的内容可能会有不同的需求。比方说,一个应用希望抓取 gtp 报头中的 pdp context,以此建立起某个手机号在某段时间内使用的是哪个 ip 的映射,它不关心上层应用的内容;另一个应用希望抓取内层 ip …

阅读全文…

使用 libpcap 分析网络报文 (1)

最近要对 tcpdump 抓到的报文进行分析,开始的时候用 wireshark 的命令行工具 tshark 把分析的结果保存成文本文件然后再用正则表达式匹配需要的字段,这样好处是不用自己分析协议,只要抓取需要的字段就行了,缺点是相当地慢,330M 的 tcpdump 文件经过 tshark 处理后得到 5G+ 的文本文件,还要从这 5G+ 文本中做字符串匹配……

于是往下走一层,发现 wireshark 和 tcpdump 都使用了同样的库--libpcap,来实现抓包操作。对于抓包需要用到的 libpcap 函数并不多,主要是自己分析协议部分比较麻烦。网上找了些 libpcap 的资料,在这里总结一下。

简介(参考资料 [1])

libpcap 是一个 C 语言库,libpcap 的英文意思是 Packet Capture library,即数据包捕获函数库,其功能是通过网卡抓取网络以太网中的数据包。这个库为不同的平台提供了一致的 c 函数编程接口,在安装了 libpcap 的平台上,以 libpcap …

阅读全文…