pcap_loop

pcap_loop是一個函式。

函式名稱:int pcap_loop(pcap_t * p,int cnt, pcap_handler callback, uchar * user);

函式功能:捕獲數據包,不會回響pcap_open_live()函式設定的逾時時間

參數說明:p 是由pcap_open_live()返回的所打開的網卡的指針;cnt用於設定所捕獲數據包的個數;pcap_handler 是與void packet_handler()使用的一個參數,即回調函式的名稱;user值一般為NULL

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

其中第一個參數是winpcap的句柄,第二個是指定捕獲的數據包個數,如果為-1則無限循環捕獲。第四個參數user是留給用戶使用的。

第三個是回調函式其原型如下:

pcap_callback(u_char* argument,const struct pcap_pkthdr* packet_header,const u_char* packet_content)

其中參數packet_content表示的捕獲到的數據包的內容

參數argument是從函式pcap_loop()傳遞過來的。 注意:這裡的參數就是指 pcap_loop中的 *user 參數

參數pcap_pkthdr 表示捕獲到的數據包基本信息,包括時間,長度等信息.

另外:回調函式必須是全局函式或靜態函式,其參數默認,比如pcap_loop()可以寫成

pcap_loop(pcap_handle,10,pcap_callback,NULL)不能往裡面傳遞實參.

-----------------------------------------------------------------------------------------------------------------

pcap_loop和callback之間參數存在聯繫:

pcap_loop的最後一個參數user是留給用戶使用的,當callback被調用的時候這個值會傳遞給callback的第一個參數(也叫user),callback的最後一個參數p指向一塊記憶體空間,這個空間中存放的就是pcap_loop抓到的數據包。callback的第二個參數是一個結構體指針,該結構體定義如下:

struct pcap_pkthdr {

struct timeval ts; /* 時間戳 */

bpf_u_int32 caplen; /* 已捕獲部分的長度 */

bpf_u_int32 len; /* 該包的脫機長度 */

};

這個結構體是由pcap_loop自己填充的,用來取得一些關於數據包的信息

所以,在callback函式當中只有第一個user指針是可以留給用戶使用的,如果你想給callback傳遞自己參數,那就只能通過pcap_loop的最後一個參數user來實現了

相關詞條

熱門詞條

聯絡我們