【Libnids】跑通samples(小白向)| 解决printall抓不到包

目录

前言

跑通 samples

分析printall.c

执行printall之后未报错也未捕获数据

一些小tips


前言

对于没有系统学过Linux的我来说,毕设做 libnids 真是脑壳疼。

对于小白来说,我们首先要做的就是熟悉这个软件,知道它有什么功能。

请大家养成一个好习惯,

去看官方文档!官方文档!官方文档!

下面给大家指路:

这是被翻译成中文的api文档(适合我们这种英文不好,还没习惯读官方文档的人。)

https://wwwpf.github.io/2017/03/02/Libnids-API%E6%96%87%E6%A1%A3/

着重看 数据结构函数 作用。你现在不看以后也会看...

读了官方文档后,我们发现有这样一章:

简单的例子能帮我们快速熟悉这个库。

 

跑通 samples

首先,我们去安装libnids的目录下:

这里有一个samples文件夹,(也就是说api文档里的示例不用你自己建了!然后 src 装着各种库函数,你也一定有机会阅读的,毕竟坑那么多....)

点进去以后:

稍微有点 Linux 知识的朋友会知道 Makefile 的作用是把一些编译命令都放到这个文件里,然后在命令行中输入“make”,

就可以生成可执行文件了。

这里在我 “make” 的时候出现了很多警告和错误。

我是这样解决的:

第一步:在 libnids-1.24 目录(也就是主目录下)依次敲如下命令:

./configure --disable-libnet --disable-libglib
make clean
make
sudo make install

第二步:在 samples 里的 sniff.c 的头文件中引入以下三个库:

#include <stdlib.h>
#include <string.h>
#include <unistd.h>

根据错误可以看到缺少一些库,你可能还缺其它的,缺啥补啥。(ps:我也不知道为什么示例文件还会少库...)

这样之后呢,我们再 make

红框框出来的是一些无伤大雅的警告。

我们回到samples文件夹里看一下:

多了这样三个可执行文件。

overflows 和 sniff 我还没精力看它俩是干啥的,printall 细细研究了下,包括了调用Libpcap抓包以及重组。

 

分析printall.c

下面来简单说一下 printall.c,其实内容很少,主要就是main函数中调用,然后写了回调函数 tcp_callback。

tcp_callback 如下,tcp_stream 结构体定义了 tcp的连接信息,其中 nids_state 定义了连接状态,根据不同的连接状态我们做出不同的响应,很明显最重要的是接收到数据后怎么做,也就是当 nids_state == NIDS_DATA时。

你可以做一些简单的处理达到分析数据的目的:比如下图红框里,我把数据打印到终端,然后写入了一个文件中。

再给大家指路一个数据结构注释写得特别好的博客:

http://lihuia.com/2015/02/16/libnids%E5%B8%B8%E7%94%A8%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/

 

执行printall之后未报错也未捕获数据

我这边出现了两个问题:完全捕获不到数据 or 捕获不到图片数据

这两个问题都可以采用如下方法解决:在main函数中关闭校验和。

原理是:我们 tcp 流在传输时不是会进行差错检验么,然后就是根据校验和来检验数据是否完好无缺的。nids_chksum_ctl 结构体的 action 定义了是否开启检验校验和,因为某些我还没研究透的py交易,当校验和出错时会错过数据包,从而不能重组。

等到哪天我搞透彻了再来写一篇博客。以下是捕获到的数据一览:

多么熟悉的 header 头,让人流泪 TT

框出来的箭头,-> 是 我发出去的, <- 是服务器发过来的。乱码是图片,我以二进制格式保存到了.bin文件里。

 

一些小tips

1、你可以随意浏览网页抓包,但是很多网页都是https协议,由于https协议是加密的,你会抓到乱码。而且浏览器中请求太多,不方便我们分析。

2、推荐大家使用httpbin。可以发送简单的http请求。指路:http://httpbin.org/

比如:curl -X GET "http://httpbin.org/image/jpeg" -H "accept: image/jpeg"

这是获取 jpeg格式的图片。一个终端发送请求,一个终端执行printall捕获数据,美哉。

3、使用 hexdump -C XX.bin 在终端中将二进制数据转换为16进制展示。

4、使用 ctrl + shift + f 在终端中查找数据,比如我在捕获的数据中找到了 ff d8,也就是jpeg文件头,感人!

 

下次讲讲如何分析捕获的数据并重组为源文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章