【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文件頭,感人!

 

下次講講如何分析捕獲的數據並重組爲源文件。

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