函式名稱: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來實現了
函式名稱: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來實現了