libpcap使用入門例項

2021-06-24 11:24:37 字數 1508 閱讀 8631

最近在學習抓包和分析各種協議頭,所以把心得總結一下。       

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裡面沒有顯式的全域...