libpcap 庫函式 API 簡介

2021-05-10 21:34:54 字數 4548 閱讀 4484

libpcap的英文意思是 packet capture library,即資料報捕獲函式庫。該庫提供的c函式介面可用於需要捕獲經過網路介面(只要經過該介面,目標位址不一定為本機)資料報的系統開發上。由 berkeley大學lawrence berkeley national  laboratory研究院的van jacobson、craig leres和steven mccanne編寫,目前的最新版本為0.4。該函式庫支援linux、solaris和*bsd系統平台。

主要介面函式說明如下:

pcap_t *pcap_open_live(char *device, int snaplen,

int promisc, int to_ms, char *ebuf)

獲得用於捕獲網路資料報的資料報捕獲描述字。device引數為指定開啟

的網路裝置名。snaplen引數定義捕獲資料的最大位元組數。promisc指定

是否將網路介面置於混雜模式。to_ms引數指定超時時間(毫秒)。

ebuf引數則僅在pcap_open_live()函式出錯返回null時用於傳遞錯誤消

息。 pcap_t *pcap_open_offline(char *fname, char *ebuf)

開啟以前儲存捕獲資料報的檔案,用於讀取。fname引數指定開啟的文

件名。該檔案中的資料格式與tcpdump和tcpslice相容。"-"為標準輸

入。ebuf引數則僅在pcap_open_offline()函式出錯返回null時用於傳

遞錯誤訊息。

pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)

開啟用於儲存捕獲資料報的檔案,用於寫入。fname引數為"-"時表示

標準輸出。出錯時返回null。p引數為呼叫pcap_open_offline()或

pcap_open_live()函式後返回的pcap結構指標。fname引數指定開啟

的檔名。如果返回null,則可呼叫pcap_geterr()函式獲取錯誤消

息。 char *pcap_lookupdev(char *errbuf)

用於返回可被pcap_open_live()或pcap_lookupnet()函式呼叫的網路

裝置名指標。如果函式出錯,則返回null,同時errbuf中存放相關的

錯誤訊息。

int pcap_lookupnet(char *device, bpf_u_int32 *netp,

bpf_u_int32 *maskp, char *errbuf)

獲得指定網路裝置的網路號和掩碼。netp引數和maskp引數都是

bpf_u_int32指標。如果函式出錯,則返回-1,同時errbuf中存放相

關的錯誤訊息。

int pcap_dispatch(pcap_t *p, int cnt,

pcap_handler callback, u_char *user)

捕獲並處理資料報。cnt引數指定函式返回前所處理資料報的最大值。

cnt=-1表示在乙個緩衝區中處理所有的資料報。cnt=0表示處理所有

資料報,直到產生以下錯誤之一:讀取到eof;超時讀取。callback

引數指定乙個帶有三個引數的**函式,這三個引數為:乙個從

pcap_dispatch()函式傳遞過來的u_char指標,乙個pcap_pkthdr結構

的指標,和乙個資料報大小的u_char指標。如果成功則返回讀取到的

位元組數。讀取到eof時則返回零值。出錯時則返回-1,此時可呼叫

pcap_perror()或pcap_geterr()函式獲取錯誤訊息。

int pcap_loop(pcap_t *p, int cnt,

pcap_handler callback, u_char *user)

功能基本與pcap_dispatch()函式相同,只不過此函式在cnt個資料報

被處理或出現錯誤時才返回,但讀取超時不會返回。而如果為

pcap_open_live()函式指定了乙個非零值的超時設定,然後呼叫

pcap_dispatch()函式,則當超時發生時pcap_dispatch()函式會返回。

cnt引數為負值時pcap_loop()函式將始終迴圈執行,除非出現錯誤。

void pcap_dump(u_char *user, struct pcap_pkthdr *h,

u_char *sp)

向呼叫pcap_dump_open()函式開啟的檔案輸出乙個資料報。該函式可

作為pcap_dispatch()函式的**函式。

int pcap_compile(pcap_t *p, struct bpf_program *fp,

char *str, int optimize, bpf_u_int32 netmask)

將str引數指定的字串編譯到過濾程式中。fp是乙個bpf_program結

構的指標,在pcap_compile()函式中被賦值。optimize引數控制結果

**的優化。netmask引數指定本地網路的網路掩碼。

int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

指定乙個過濾程式。fp引數是bpf_program結構指標,通常取自

pcap_compile()函式呼叫。出錯時返回-1;成功時返回0。

u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)

返回指向下乙個資料報的u_char指標。

int pcap_datalink(pcap_t *p)

返回資料鏈路層型別,例如dlt_en10mb。

int pcap_snapshot(pcap_t *p)

返回pcap_open_live被呼叫後的snapshot引數值。

返回當前系統主機位元組與被開啟檔案的位元組順序是否不同。

int pcap_major_version(pcap_t *p)

返回寫入被開啟檔案所使用的pcap函式的主版本號。

int pcap_minor_version(pcap_t *p)

返回寫入被開啟檔案所使用的pcap函式的輔版本號。

int pcap_stats(pcap_t *p, struct pcap_stat *ps)

向pcap_stat結構賦值。成功時返回0。這些數值包括了從開始

捕獲資料以來至今共捕獲到的資料報統計。如果出錯或不支援

資料報統計,則返回-1,且可呼叫pcap_perror()或

pcap_geterr()函式來獲取錯誤訊息。

file *pcap_file(pcap_t *p)

返回被開啟檔案的檔名。

int pcap_fileno(pcap_t *p)

返回被開啟檔案的檔案描述字號碼。

void pcap_perror(pcap_t *p, char *prefix)

在標準輸出裝置上顯示最後乙個pcap庫錯誤訊息。以prefix參

數指定的字串為訊息頭。

char *pcap_geterr(pcap_t *p)

返回最後乙個pcap庫錯誤訊息。

char *pcap_strerror(int error)

如果strerror()函式不可用,則可呼叫pcap_strerror函式替代。

void pcap_close(pcap_t *p)

關閉p引數相應的檔案,並釋放資源。

void pcap_dump_close(pcap_dumper_t *p)

#include

#include

#define cap_len 2048

#define filename "rh"

#define _debug_

int main()

if(pcap_lookupnet(device, &localnet, &netmask, ebuf) < 0)

if (pcap_compile(pd, &fcode, "", 1, netmask) < 0)

exit(printf("error %s/n","pcap_compile"));

if (pcap_setfilter(pd,&fcode) < 0)

exit(printf("error %s/n","pcap_setfilter"));

p=pcap_dump_open(pd,filename);

if(p == null)

exit(printf("error:%s/n","pcap_dump_open"));

printer=pcap_dump;

pcap_userdata=(u_char *)p;

if(pcap_loop(pd, -1, printer, pcap_userdata) < 0)

exit(printf("error, %s/n","pcap_loop"));

pcap_close(pd);

exit(0);

}關閉相應的被開啟檔案。

libpcap使用簡介

li bpcap是unix linux平台下的網路資料報捕獲函式包,大多數網路監控軟體都以它為基礎。這個庫的位置在 usr local lib下.在 usr local include下是他的標頭檔案pcap.h。要寫乙個使用libpcap庫函式的程式只需要在 中加上 i nclude 然後在編譯時...

Python Pandas庫函式文件API

關鍵縮寫和包匯入 縮寫 df 任意的pandas dataframe物件 s 任意的pandas series物件 匯入包 import pandas as pd import numpy as np 匯入資料 pd.read csv filename 從csv檔案匯入資料 pd.read tabl...

vector中常用API函式簡介

vector int first 建立乙個空的vector vector int second 4,100 建立乙個帶有4個100的vector vector int third second.begin second.end 將second的begi到end賦給third vector int f...