最近在學習抓包和分析各種協議頭,所以把心得總結一下。
libpcap是乙個用於抓取網路資料報的庫,該庫功能強大,linux的抓包工具tcpdump就是以它為基礎開發的。
libpcap的最小工作系統其實很簡單,大概思路如下:
1,尋找第乙個可用的網路介面,pcap_lookupdev(errbuf); 如果跳過這一步,自己指定乙個介面也是可以的。
2,開啟該介面,並分配乙個pcap_t結構體。pcap_t *pcap_open_live(const char *source, int snaplen, int promisc, int to_ms, char *errbuf);
3, 設定包過濾條件pcap_compile();pcap_setfilter(); 這一步如果調過的話,會抓取該介面的所以資料報。
4, 捕獲資料報:pcap_next(),pcap_loop();pcap_dispatch();三種捕獲方式。
5,關閉介面釋放pacp_t結構體:pcap_close(device);
下面是最小工作系統的例項:
#include #include #include #include #include #include #include #include #include #include #include #define max_filter_size 30
void usage(void)
void getpacket(u_char *arg, const struct pcap_pkthdr *packhdr,
const u_char *packet)
index++;
}#endif
printf("\n\n");
}int main (int argc, char *argv)
; char *devname = null;
char errbuf[pcap_errbuf_size] =;
pcap_t *device;
struct bpf_program filter;
int index = 0;
if (argc < 2)
while((c = getopt(argc, argv, "f:")) != -1)
}devname = pcap_lookupdev(errbuf);
if (devname == null)
device = pcap_open_live(devname, 1511, 0, -1, errbuf);
if (device == null)
pcap_compile(device, &filter, filterbuf, 1, 0);
pcap_setfilter(device, &filter);
pcap_loop(device, 10, getpacket, (u_char *)&index);
pcap_close(device);
return 0;
}
libpcap使用入門
libpcap是unix linux平台下的網路資料報捕獲函式包,大多數網路監控軟體都以它為基礎。這個庫的位置在 usr local lib下.在 usr local include下是他的標頭檔案pcap.h。要寫乙個使用libpcap庫函式的程式只需要在 中加上 i nclude 然後在編譯時末...
libpcap使用簡介
li bpcap是unix linux平台下的網路資料報捕獲函式包,大多數網路監控軟體都以它為基礎。這個庫的位置在 usr local lib下.在 usr local include下是他的標頭檔案pcap.h。要寫乙個使用libpcap庫函式的程式只需要在 中加上 i nclude 然後在編譯時...
使用libpcap庫的多執行緒問題
最近在系統裡遇到乙個程式,總會莫名其妙的segmentation fault,而且每次出現的問題都不相同。考慮到有多執行緒,可能會跟這個有關係。但是一直沒有找出到底 出的問題,這個程式使用libpcap的一些function來進行抓包分析,每個網絡卡對應乙個執行緒。function裡面沒有顯式的全域...