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)