pcap_loop

pcap_loop  

pcap庫中pcap_loop函數所用到的回調函數。

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

這裏pcap_loop的作用是抓包,每抓到一個包之後就調用callback函數來處理之,callback需要你自己編寫,callback的類似於這種:

void PacketCallback(u_char *user, const struct pcap_pkthdr *h, const u_char *p);

你給出的代碼是定義了一個函數指針grinder_t的類型,就可以用grinder_t來聲明函數指針了
grinder應該就是作爲一個回調函數來處理pcap抓到的包

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來實現了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章