1. 程式人生 > >(轉)Libcap庫學習::(三)抓包流程

(轉)Libcap庫學習::(三)抓包流程

理解了Libpcap的工作原理,下面將介紹如何利用Libpcap庫進行資料包的捕獲。其具體的程式設計流程如下:


(1)網路裝置查詢

網路裝置查詢的目的就是發現可用的網絡卡,它的實現函式是pcap_lookupdev(),如果當前有多個網絡卡,它會返回一個網路裝置名指標列表。

(2)開啟網路裝置

利用第一步的返回值,使用者可以決定Libpcap實用哪個網絡卡,當然開啟這個網路裝置的函式是pcap_open_live(),它返回用於捕獲網路資料包的資料包捕獲描述字。對於此網路裝置的任何操作都要基於這個描述字。

(3)獲取網路引數

利用pcap_lookupnet()函式,可以獲得指定網路裝置的IP地址和子網掩碼,當然這個步驟並不是必須,但是為了顯示的完整性,有時候還是需要標記這些引數。

(4)編譯過濾策略

Libpcap的一個功能就是提供資料包過濾,即只採集符合規則的資料包,此項功能由函式pcap_compile()來實現,這個函式的作用即使將使用者指定的過濾策略編譯到過濾程式中。

(5)設定過濾器

這是上步驟的繼續,pcap_setfilter()函式用於設定上一步驟配置好的過濾器,當然要註明一點,步驟4和步驟5也不是必須的,如果不採用過濾,意味著程式會抓到所有的網路資料包。

(6)利用回撥函式捕獲資料包

Libpcap提供的是一種回撥的機制來獲取資料包,可以採用pcap_loop()和pcap_dispatch()函式來抓取資料包,當然,也可以呼叫pcap_next和pcap_next_ex()函式來完成同樣的工作。

若資料包捕獲到之後,應用程式就可以採用相應的方式進行資料包解析,分析其中感興趣的資訊,當然分析工作往往是整個程式的關鍵。

(7)關閉網路裝置

當應用程式工作完畢時,可以呼叫pcap_close()函式關閉網路裝置,釋放資源。