我試圖用pcap做一些簡單的數據包捕獲,所以我創建了一個句柄來監聽eth0。我的問題是在接近我的代碼末尾的pcap_loop(handle, 10, myCallback, NULL);
行。我正在嘗試使用pcap_loop
。 預期的輸出應該是:'pcap_loop'沒有記錄數據包,甚至沒有運行
eth0
Activated!
1
2
3
...
10
Done processing packets!
電流輸出缺少增量:「處理完的數據包」
eth0
Activated!
Done processing packets!
目前它只是跳繩一直到我不知道爲什麼。即使不進入回調,應該還是等待數據包作爲;計數」參數(見pcap_loop文檔)設置爲10
#include <iostream>
#include <pcap.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
void myCallback(u_char *useless, const struct pcap_pkthdr* hdr, const u_char*packet){
static int count = 1;
std::cout <<count<<std::endl;
count ++;
}
int main(){
char errbuf[PCAP_ERRBUF_SIZE];
char * devName;
char* net;
char* mask;
const u_char*packet;
struct in_addr addr;
struct pcap_pkthdr hdr;
bpf_u_int32 netp;
bpf_u_int32 maskp;
pcap_if_t *devs;
pcap_findalldevs(&devs, errbuf);
devName = pcap_lookupdev(errbuf);
std::cout <<devName<<std::endl;
int success = pcap_lookupnet(devName, &netp, &maskp, errbuf);
if(success<0){
exit(EXIT_FAILURE);
}
pcap_freealldevs(devs);
//Create a handle
pcap_t *handle = pcap_create(devName, errbuf);
pcap_set_promisc(handle, 1);
pcap_can_set_rfmon(handle);
//Activate the handle
if(pcap_activate(handle)){
std::cout <<"Activated!"<<std::endl;
}
else{
exit(EXIT_FAILURE);
}
pcap_loop(handle, 10, myCallback, NULL);
std::cout <<"Done processing packets!"<<std::endl;
//close handle
pcap_close(handle);
}
我應該更加重視的文檔。在檢查pcap_activate的成功時,這是一個非常大的錯誤。謝謝 –