首頁>Club>
10
回覆列表
  • 1 # hutfcbnkhf

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

  • 中秋節和大豐收的關聯?
  • 19中超最有可能降級的球隊是哪兩支?或者說你最希望誰能降級?