libpcap 編程二(libpcap函數庫介紹)

1)libpcap,全名爲packet capture library,即數據包捕獲函數庫。

 

2)libpcap的應用:

1. 入侵檢測系統

2. 網絡調試

3. 數據包捕獲、過濾

4. 網絡統計軟件

5. 網絡嗅探器

 

3)libpcap庫中的主要函數說明

/******************************************************

 * 函數名稱:pcap_open_live

 * 函數功能:獲得用於捕獲網絡數據包的數據包捕獲描述字

 * 參數說明:

 *               device:指定打開的網絡設備名

 *               snaplen:捕獲數據的最大字節數

 *               promisc:是否將網絡接口設置爲混雜模式

 *               to_ms:指定超時時間(毫秒)

 *               ebuf:出錯信息

 * 返回值:

 *             成功:數據包捕獲描述字

 *             失敗:NULL

 *******************************************************/

 pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)

 

 

 

/******************************************************

 * 函數名稱:pcap_lookupdev

 * 函數功能:查詢當前系統中的網絡設備

 * 參數說明:

 

 *                ebuf:出錯信息

 * 返回值:

 *                成功:指向網絡設備名稱的指針

 *                失敗:NULL

 ******************************************************/

 char *pcap_lookupdev(char *errbuf)

 

 

 

 

/******************************************************

 * 函數名稱:pcap_lookupnet

 * 函數功能:獲得該網絡設備的ip地址及掩碼信息

 * 參數說明:

 *               device:網絡設備名

 *               netp:ip地址

 *               maskp:掩碼

 

 *               ebuf:出錯信息

 * 返回值:

 *               成功:非-1

 *               失敗:-1

 *******************************************************/

 int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf)

 

 

 

/********************************************************

 * 函數名稱:pcap_complie

 * 函數功能:將字符串描述的條件編譯到過濾程序中

 * 參數說明:

 *               p:調用pcap_open_live函數獲得的用於捕獲網絡數據包的描述字

 *               fp:指向bpf_program結構的指針

 *               str:指定要編譯到過濾程序中的字符串

 

 *               optimize:控制結果代碼的優化

 *               netmask:指定本地網絡的子網掩碼

 * 返回值:

 *               成功:0

 *               失敗:-1

 *********************************************************/

 int pcap_compile(pcap_t *p, struct bpf_program *fp,char *str, int optimize, bpf_u_int32 netmask)

 

 

 

/**********************************************************

 * 函數名稱:pcap_setfilter

 * 函數功能:將過濾規則應用到指定的數據包捕獲描述字

 * 參數說明:

 *               p:調用pcap_open_live函數獲得的用於捕獲網絡數據包的描述字

 *               fp:指向bpf_program結構的指針,來自於調用pcap_compile函數獲得的結果

 

 

 * 返回值:

 *               成功:0

 *               失敗:-1

 **********************************************************/

int pcap_setfilter(pcap_t *p, struct bpf_program *fp) 
 

 

 

/*********************************************************

 * 函數名稱:pcap_next

 * 函數功能:捕獲單個數據包

 * 參數說明:

 *               p:調用pcap_open_live函數獲得的用於捕獲網絡數據包的描述字

 *               h:指向p_cap_pkthdr結構的指針

 

 

 * 返回值:

 

 

 *               成功:獲得的網絡數據包內容

 *               失敗:NULL

 *********************************************************/

u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)

 

 

 

/**********************************************************

 * 函數名稱:pcap_dispatch

 * 函數功能:捕獲並處理數據包的功能

 * 參數說明:

 *               p:調用pcap_open_live函數獲得的用於捕獲網絡數據包的描述字

 *               cnt:函數調用返回前所處理的最大數據包數

 *               callback:指定一個帶有三個參數的回調函數,在獲取的數據包後,會調用該函數對數據包進行處理

 *               user:傳遞給callback函數的參數

 

 

 * 返回值:

 *               成功:未獲取到任何數據包,返回0;否則返回讀取的數據包數

 *               失敗:-1

 **********************************************************/

int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user)

 

 

 

/***********************************************************

 * 函數名稱:pcap_loop

 * 函數功能:與pcap_dispatch的功能類似,但pcap_loop不會在讀取超時時返回,函數只在處理完cnt個數據包或出錯後才返回

 * 參數說明:

 *               p:調用pcap_open_live函數獲得的用於捕獲網絡數據包的描述字

 *               cnt:函數調用返回前所處理的最大數據包數

 *               callback:指定一個帶有三個參數的回調函數,在獲取的數據包後,會調用該函數對數據包進行處理

 *               user:傳遞給callback函數的參數

 * 返回值:

 *               成功:未獲取到任何數據包,返回0;否則返回讀取的數據包數

 *               失敗:-1

 **********************************************************/

int pcap_loop(pcap_t *p, int cnt,pcap_handler callback, u_char *user)

 

 

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