WinPcap笔记(10):从堆文件中读取数据包
生活随笔
收集整理的這篇文章主要介紹了
WinPcap笔记(10):从堆文件中读取数据包
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一講將數據包保存在堆文件中,現在,我們就可以讀取它了。可以通過pcap_open_offline()函數將堆文件打開。函數具體格式如下:
pcap_t* pcap_open_offline ( const char * fname, char * errbuf );
結果如下:
pcap_t* pcap_open_offline ( const char * fname, char * errbuf );
參數含義:
fname:要打開的文件名;
errbuf:保存錯誤信息;
這里我們通過pcap_createsrcstr()函數根據新WinPcap語法創建一個源字符串。函數具體格式如下:
int pcap_createsrcstr ( char * source, int type, const char * host, const char * port, const char * name, char * errbuf );
參數含義:
source:要存入的源字符串;
type:要創建的源字符串類型;
host:遠程主機;
port:遠程端口;
name:我們要打開的文件名;
errbuf:存儲錯誤信息;
返回值:
0:沒有錯誤;
-1:創建出錯,錯誤寫入errbuf中;
下面的程序讀取保存的文件,然后將數據包中的數據打印出來:
#include <stdio.h> #include <pcap.h>#define LINE_LEN 16void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *);main(int argc, char **argv) {pcap_t *fp;char errbuf[PCAP_ERRBUF_SIZE];char source[PCAP_BUF_SIZE];if (argc != 2) {printf("usage: %s filename", argv[0]);return -1;}/* 根據新WinPcap語法創建一個源字符串 */if (pcap_createsrcstr(source, // 源字符串PCAP_SRC_FILE, // 我們要打開的文件NULL, // 遠程主機NULL, // 遠程主機端口argv[1], // 我們要打開的文件名errbuf // 錯誤緩沖區) != 0){fprintf(stderr, "\nError creating a source string\n");return -1;}/* 打開捕獲文件 */if ((fp = pcap_open(source, // 設備名65536, // 要捕捉的數據包的部分// 65535保證能捕獲到不同數據鏈路層上的每個數據包的全部內容PCAP_OPENFLAG_PROMISCUOUS, // 混雜模式1000, // 讀取超時時間NULL, // 遠程機器驗證errbuf // 錯誤緩沖池)) == NULL){fprintf(stderr, "\nUnable to open the file %s.\n", source);return -1;}// 讀取并解析數據包,直到EOF為真pcap_loop(fp, 0, dispatcher_handler, NULL);return 0; }void dispatcher_handler(u_char *temp1,const struct pcap_pkthdr *header, const u_char *pkt_data) {u_int i = 0;/* 打印pkt時間戳和pkt長度 */printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);/* 打印數據包 */for (i = 1; (i < header->caplen + 1); i++){printf("%.2x ", pkt_data[i - 1]);if ((i % LINE_LEN) == 0) printf("\n");}printf("\n\n");}
下面的程序同樣實現了如上功能,只是,我們使用了 pcap_next_ex() 函數來代替需要進行回調的 pcap_loop() :
結果如下:
總結
以上是生活随笔為你收集整理的WinPcap笔记(10):从堆文件中读取数据包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空镜子剧情介绍
- 下一篇: 神角技巧手游哥布林营地宝箱怎么开