久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Winpcap主要數(shù)據(jù)結(jié)構(gòu)及函數(shù)

 香遠(yuǎn)_溢清 2014-05-05

(一)

數(shù)據(jù)結(jié)構(gòu)

·1) typedef struct _ADAPTER  ADAPTER     //描述一個(gè)網(wǎng)絡(luò)適配器,;

·2) typedef struct _PACKET PACKET       //描述一組網(wǎng)絡(luò)數(shù)據(jù)報(bào)的結(jié)構(gòu),;

·3) typedef struct NetType NetType       //描述網(wǎng)絡(luò)類(lèi)型的數(shù)據(jù)結(jié)構(gòu),;

·4) typedef struct npf_if_addr npf_if_addr  //描述一個(gè)網(wǎng)絡(luò)適配器的ip地址,;

·5) struct bpf_hdr   //數(shù)據(jù)報(bào)頭部,;

·6) struct bpf_stat  //當(dāng)前捕獲數(shù)據(jù)報(bào)的統(tǒng)計(jì)信息,。

函數(shù)

1)int pcap_findalldevs ( pcap_if_t ** alldevsp,  char * errbuf)

功能:列出當(dāng)前所有可用的網(wǎng)絡(luò)設(shè)備(網(wǎng)卡)

所在頭文件:pcap.h

參數(shù)說(shuō)明: pcap_if_t ** alldevsp  指向pcap_if_t結(jié)構(gòu)列表的指針的地址,。實(shí)際使用時(shí),,聲明一個(gè)pcap_if_t結(jié)構(gòu)的指針(pcap_if_t * alldevsp),然后把該地址作為參數(shù)傳入即可(&alldevsp),。
char * errbuf  錯(cuò)誤緩沖區(qū),,要求長(zhǎng)度至少為PCAP_ERRBUF_SIZE 字節(jié)

返回值: -1:出錯(cuò),將會(huì)向錯(cuò)誤緩沖中填充錯(cuò)誤信息,,錯(cuò)誤信息為ASCII碼,,可以直接打印出來(lái)。

         0:正確返回,,可以使用alldevsp訪(fǎng)問(wèn)所有網(wǎng)絡(luò)硬件

pcap_if的結(jié)構(gòu)

Struct pcap_if {
   struct pcap_if  *next;
   char *name;
   chat *description;
   struct pcap_addr address;
   u_int flags;
}

也可以用pcap_if_t 代替pcap_if
2) pcap_t pcap_open_live char device, int snaplen, int promisc,int to_ms, char errbuf );

    獲取一個(gè)包捕捉句柄,,類(lèi)似文件操作函數(shù)使用的文件句柄。
    device指定網(wǎng)絡(luò)接口設(shè)備名,。
    snaplen指定單包最大捕捉字節(jié)數(shù),。
    promisc指定網(wǎng)絡(luò)接口進(jìn)入混雜模式。
    to_ms指定毫秒級(jí)讀超時(shí),,0可能代表永不超時(shí),。
    errbuf包含失敗原因。
    如果調(diào)用失敗返回NULL

3)void pcap_close pcap_t  *p )

該函數(shù)用于關(guān)閉pcap_open_live()獲取的包捕捉句柄,,釋放相關(guān)資源,。
4)int pcap_lookupnet char device, bpf_u_int32 netp, pf_u_int32 maskp, char errbuf );

該函數(shù)用于獲取指定網(wǎng)絡(luò)接口的IP地址、子網(wǎng)掩碼,。

5)int pcap_compile pcap_t p, struct bpf_program fp, char str,int optimize

bpf_u_int32 netmask );

該函數(shù)用于解析過(guò)濾規(guī)則串,,填寫(xiě)bpf_program結(jié)構(gòu)。str指向過(guò)濾規(guī)則串,。
6)int pcap_setfilter pcap_t p, struct bpf_program fp );

該函數(shù)用于設(shè)置pcap_compile()解析完畢的過(guò)濾規(guī)則,,完全可以自己提供過(guò)濾規(guī)則,無(wú)須pcap_compile()介入

7)  int pcap_dispatch pcap_t p, int cnt, pcap_handler callback, 
                                  u_char user );

    捕捉報(bào)文以及分發(fā)報(bào)文到預(yù)先指定好的處理函數(shù)(回調(diào)函數(shù)),。
    pcap_dispatch()接收夠cnt個(gè)報(bào)文便返回,,如果cnt為-1意味著所有報(bào)文集中在一個(gè)緩沖區(qū)中。如果cnt為0,,僅當(dāng)發(fā)生錯(cuò)誤,、讀取到EOF或者讀超時(shí)到了(pcap_open_live中指定)才停止捕捉報(bào)文并返回。



8)int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user),;

這里pcap_loop的作用是抓包,,每抓到一個(gè)包之后就調(diào)用callback函數(shù)來(lái)處理之,callback需要你自己編寫(xiě),,callback的類(lèi)似于這種:

void PacketCallback(u_char *user, const struct pcap_pkthdr *h, const u_char *p);

你給出的代碼是定義了一個(gè)函數(shù)指針grinder_t的類(lèi)型,,就可以用grinder_t來(lái)聲明函數(shù)指針了
grinder應(yīng)該就是作為一個(gè)回調(diào)函數(shù)來(lái)處理pcap抓到的包

pcap_loop和callback之間參數(shù)存在聯(lián)系,,pcap_loop的最后一個(gè)參數(shù)user是留給用戶(hù)使用的,,當(dāng)callback被調(diào)用的時(shí)候這個(gè)值會(huì)傳遞給callback的第一個(gè)參數(shù)(也叫user),callback的最后一個(gè)參數(shù)p指向一塊內(nèi)存空間,,這個(gè)空間中存放的就是pcap_loop抓到的數(shù)據(jù)包,。callback的第二個(gè)參數(shù)是一個(gè)結(jié)構(gòu)體指針,該結(jié)構(gòu)體定義如下:
struct pcap_pkthdr {
struct timeval ts;   
bpf_u_int32 caplen;   
bpf_u_int32 len;  
};
這個(gè)結(jié)構(gòu)體是由pcap_loop自己填充的,,用來(lái)取得一些關(guān)于數(shù)據(jù)包的信息
所以,,在callback函數(shù)當(dāng)中只有第一個(gè)user指針是可以留給用戶(hù)使用的,如果你想給callback傳遞自己參數(shù),,那就只能通過(guò)pcap_loop的最后一個(gè)參數(shù)user來(lái)實(shí)現(xiàn)了

(二)

 在函數(shù) pcap_open_live(), pcap_open_dead(), pcap_open_offline(), pcap_setnonblock(), pcap_getnonblock(), pcap_findalldevs(), pcap_lookupdev(), 和 pcap_lookupnet() 中的errbuf假定至少有 PCAP_ERRBUF_SIZE 個(gè)字符,。

typedef void(*) pcap_handler (u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
接受數(shù)據(jù)包的回調(diào)函數(shù)的原型

pcap_t * pcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf)
在網(wǎng)絡(luò)中打開(kāi)一個(gè)活動(dòng)的捕獲

pcap_t * pcap_open_dead (int linktype, int snaplen)
在還沒(méi)開(kāi)始捕獲時(shí),創(chuàng)建一個(gè)pcap_t的結(jié)構(gòu)體

pcap_t * pcap_open_offline (const char *fname, char *errbuf)
打開(kāi)一個(gè) tcpdump/libpcap 格式的存儲(chǔ)文件,,來(lái)讀取數(shù)據(jù)包

pcap_dumper_t * pcap_dump_open (pcap_t *p, const char *fname)
打開(kāi)一個(gè)文件來(lái)寫(xiě)入數(shù)據(jù)包

int pcap_setnonblock (pcap_t *p, int nonblock, char *errbuf)
在阻塞和非阻塞模式間切換

int pcap_getnonblock (pcap_t *p, char *errbuf)
獲得一個(gè)接口的非阻塞狀態(tài)信息

int pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf)
構(gòu)造一個(gè)可打開(kāi)的網(wǎng)絡(luò)設(shè)備的列表 pcap_open_live()

void pcap_freealldevs (pcap_if_t *alldevsp)
釋放一個(gè)接口列表,,這個(gè)列表將被 pcap_findalldevs()返回

char * pcap_lookupdev (char *errbuf)
返回系統(tǒng)中第一個(gè)合法的設(shè)備

int pcap_lookupnet (const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
返回接口的子網(wǎng)和掩碼

int pcap_dispatch (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
收集一組數(shù)據(jù)包

int pcap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
收集一組數(shù)據(jù)包

u_char * pcap_next (pcap_t *p, struct pcap_pkthdr *h)
返回下一個(gè)可用的數(shù)據(jù)包

int pcap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
從一個(gè)設(shè)備接口,或從一個(gè)脫機(jī)文件中,,讀取一個(gè)數(shù)據(jù)包

void pcap_breakloop (pcap_t *)
設(shè)置一個(gè)標(biāo)志位,,這個(gè)標(biāo)志位會(huì)強(qiáng)制 pcap_dispatch() 或 pcap_loop() 返回,而不是繼續(xù)循環(huán),。

int pcap_sendpacket (pcap_t *p, u_char *buf, int size)
發(fā)送一個(gè)原始數(shù)據(jù)包

void pcap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
將數(shù)據(jù)包保存到磁盤(pán)

long pcap_dump_ftell (pcap_dumper_t *)
返回存儲(chǔ)文件的文件位置

int pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
編譯數(shù)據(jù)包過(guò)濾器,,將程序中高級(jí)的過(guò)濾表達(dá)式,轉(zhuǎn)換成能被內(nèi)核級(jí)的過(guò)濾引擎所處理的東西,。 (參見(jiàn) 過(guò)濾表達(dá)式語(yǔ)法)

int pcap_compile_nopcap (int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask)
在不需要打開(kāi)適配器的情況下,,編譯數(shù)據(jù)包過(guò)濾器。這個(gè)函數(shù)能將程序中高級(jí)的過(guò)濾表達(dá)式,,轉(zhuǎn)換成能被內(nèi)核級(jí)的過(guò)濾引擎所處理的東西,。 (參見(jiàn)過(guò)濾表達(dá)式語(yǔ)法)

int pcap_setfilter (pcap_t *p, struct bpf_program *fp)
在捕獲過(guò)程中綁定一個(gè)過(guò)濾器

void pcap_freecode (struct bpf_program *fp)
釋放一個(gè)過(guò)濾器

int pcap_datalink (pcap_t *p)
返回適配器的鏈路層

int pcap_list_datalinks (pcap_t *p, int **dlt_buf)
列出數(shù)據(jù)鏈

int pcap_set_datalink (pcap_t *p, int dlt)
將當(dāng)前pcap描述符的數(shù)據(jù)鏈的類(lèi)型,設(shè)置成dlt給出的類(lèi)型,。返回-1表示設(shè)置失敗,。

int pcap_datalink_name_to_val (const char *name)
轉(zhuǎn)換一個(gè)數(shù)據(jù)鏈類(lèi)型的名字,即將具有DLT_remove的DLT_name,,轉(zhuǎn)換成符合數(shù)據(jù)鏈類(lèi)型的值,。轉(zhuǎn)換是區(qū)分大小寫(xiě)的,返回-1表示錯(cuò)誤,。

const char * pcap_datalink_val_to_name (int dlt)
將數(shù)據(jù)鏈類(lèi)型值轉(zhuǎn)換成合適的數(shù)據(jù)鏈類(lèi)型的名字,。返回NULL表示轉(zhuǎn)換失敗。

const char * pcap_datalink_val_to_description (int dlt)
將數(shù)據(jù)鏈類(lèi)型值轉(zhuǎn)換成合適的數(shù)據(jù)鏈類(lèi)型的簡(jiǎn)短的名字,。返回NULL表示轉(zhuǎn)換失敗,。

int pcap_snapshot (pcap_t *p)
返回發(fā)送給應(yīng)用程序的數(shù)據(jù)包部分的大小(字節(jié))

int pcap_is_swapped (pcap_t *p)
當(dāng)前存儲(chǔ)文件使用與當(dāng)前系統(tǒng)不同的字節(jié)序列時(shí),返回true

int pcap_major_version (pcap_t *p)
返回正在用來(lái)寫(xiě)入存儲(chǔ)文件的pcap庫(kù)的主要版本號(hào)

int pcap_minor_version (pcap_t *p)
返回正在用來(lái)寫(xiě)入存儲(chǔ)文件的pcap庫(kù)的次要版本號(hào)

FILE * pcap_file (pcap_t *p)
返回一個(gè)脫機(jī)捕獲文件的標(biāo)準(zhǔn)流

int pcap_stats (pcap_t *p, struct pcap_stat *ps)
返回當(dāng)前捕獲的統(tǒng)計(jì)信息

void pcap_perror (pcap_t *p, char *prefix)
在標(biāo)準(zhǔn)錯(cuò)誤輸出臺(tái)打印最后一次pcap庫(kù)錯(cuò)誤的文本信息,,前綴是prefix,。

char * pcap_geterr (pcap_t *p)
返回最后一次pcap庫(kù)錯(cuò)誤的文本信息

char * pcap_strerror (int error)
提供這個(gè)函數(shù),,以防 strerror() 不能使用。

const char * pcap_lib_version (void)
返回一個(gè)字符串,,這個(gè)字符串保存著libpcap庫(kù)的版本信息,。注意,它除了版本號(hào),,還包含了更多的信息,。

void pcap_close (pcap_t *p)
關(guān)閉一個(gè)和p關(guān)聯(lián)的文件,并釋放資源

FILE * pcap_dump_file (pcap_dumper_t *p)
返回一個(gè)由 pcap_dump_open()打開(kāi)的存儲(chǔ)文件的標(biāo)準(zhǔn)輸入輸出流

int pcap_dump_flush (pcap_dumper_t *p)
將輸出緩沖寫(xiě)入存儲(chǔ)文件,,這樣,,任何使用 pcap_dump() 存儲(chǔ),但還沒(méi)有寫(xiě)入文件的數(shù)據(jù)包,,會(huì)被立刻寫(xiě)入文件,。返回-1表示出錯(cuò),返回0表示成功,。

void pcap_dump_close (pcap_dumper_t *p)
關(guān)閉一個(gè)存儲(chǔ)文件

 

Windows平臺(tái)專(zhuān)用的擴(kuò)展函數(shù)
本節(jié)中的函數(shù)是從libpcap擴(kuò)展而來(lái),,為了提供更強(qiáng)大的功能(比如遠(yuǎn)程數(shù)據(jù)捕獲,數(shù)據(jù)包緩存尺寸變化或高精度的數(shù)據(jù)包注入),。然而,,目前,這些函數(shù)只能用于Windows平臺(tái),。


PAirpcapHandle pcap_get_airpcap_handle (pcap_t *p)
返回一個(gè)和適配器相關(guān)聯(lián)的AirPcap句柄,。這個(gè)句柄可以被用來(lái)改變和CACE無(wú)線(xiàn)技術(shù)有關(guān)的設(shè)置。

bool pcap_offline_filter (struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
當(dāng)給定的過(guò)濾器應(yīng)用于一個(gè)脫機(jī)數(shù)據(jù)包時(shí),,返回true

int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
將捕獲保存到文件

int pcap_live_dump_ended (pcap_t *p, int sync)
返回內(nèi)核堆處理的狀態(tài),。例如,告訴我們由 pcap_live_dump() 定義的限制條件是否已經(jīng)滿(mǎn)足,。

pcap_stat * pcap_stats_ex (pcap_t *p, int *pcap_stat_size)
返回當(dāng)前捕獲的統(tǒng)計(jì)信息,。

int pcap_setbuff (pcap_t *p, int dim)
設(shè)置與當(dāng)前適配器關(guān)聯(lián)的內(nèi)核緩存大小

int pcap_setmode (pcap_t *p, int mode)
將接口p的工作模式設(shè)置為mode

int pcap_setmintocopy (pcap_t *p, int size)
設(shè)置內(nèi)核一次調(diào)用所受到的最小數(shù)據(jù)總數(shù)

HANDLE pcap_getevent (pcap_t *p)
返回與接口p關(guān)聯(lián)的事件句柄

pcap_send_queue * pcap_sendqueue_alloc (u_int memsize)
分配一個(gè)發(fā)送隊(duì)列

void pcap_sendqueue_destroy (pcap_send_queue *queue)
銷(xiāo)毀一個(gè)發(fā)送隊(duì)列

int pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
將數(shù)據(jù)包加入到發(fā)送隊(duì)列

u_int pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
將一個(gè)發(fā)送隊(duì)列發(fā)送至網(wǎng)絡(luò)

int pcap_findalldevs_ex (char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf)
創(chuàng)建一個(gè)網(wǎng)絡(luò)設(shè)備列表,它們可以由 pcap_open()打開(kāi),。

int pcap_createsrcstr (char *source, int type, const char *host, const char *port, const char *name, char *errbuf)
接收一組字符串(hot name,port,...),,并根據(jù)新的格式,返回一個(gè)完整的源字符串(比如:'rpcap://1.2.3.4/eth0')

int pcap_parsesrcstr (const char *source, int *type, char *host, char *port, char *name, char *errbuf)
解析一個(gè)源字符串,,并返回分離出來(lái)的內(nèi)容,。

pcap_t * pcap_open (const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf)
打開(kāi)一個(gè)用來(lái)捕獲或發(fā)送流量(僅WinPcap)的通用源。

pcap_samp * pcap_setsampling (pcap_t *p)
為數(shù)據(jù)包捕獲定義一個(gè)采樣方法

SOCKET pcap_remoteact_accept (const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf)
阻塞,,直到網(wǎng)絡(luò)連接建立,。(僅用于激活模式)

int pcap_remoteact_close (const char *host, char *errbuf)
釋放一個(gè)活動(dòng)連接 (僅用于激活模式).

void pcap_remoteact_cleanup ()
清除一個(gè)正在用來(lái)等待活動(dòng)連接的socket

int pcap_remoteact_list (char *hostlist, char sep, int size, char *errbuf)
返回一個(gè)主機(jī)名,這個(gè)主機(jī)和我們建立了活動(dòng)連接,。(僅用于激活模式) 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多