最近在學習分析pcap檔案中的資料報,其中資料報的五元組(源ip,目的ip,源埠,目的埠,協議型別,共13個位元組)可以用來作為資料流的標識。我們可以將五元組提取出來,以便日後進行進一步的分析。
首先,我們需要對pcap檔案進行解析,然後將五元組資料提取出來並寫入二進位制檔案。這裡不再贅述,直接上**:
#include#include#include#include#includetypedef int32_t bpf_int32;
typedef u_int32_t bpf_u_int32;
typedef u_int16_t u_short;
typedef u_int32_t u_int32;
typedef u_int16_t u_int16;
typedef u_int8_t u_int8;
//pacp檔案頭結構體
struct pcap_file_header
;//時間戳
struct time_val
;//pcap資料報頭結構體
struct pcap_pkthdr
;//資料幀頭
typedef struct framheader_t
framheader_t;
//ip資料報頭
typedef struct ipheader_t
ipheader_t;
//tcp資料報頭
typedef struct tcpheader_t
tcpheader_t;
//udp資料
typedef struct udpheader_s
udpheader_t;
typedef struct quintet
quintet_t;
int main()
file *output = fopen("output.dat","wb");
if( output == 0)
//開始讀資料報
printf("開始讀資料報\n");
long int pkt_offset; //用來檔案偏移
pkt_offset = 24; //pcap檔案頭結構 24個位元組
int i = 0;
while(fseek(pfile, pkt_offset, seek_set) == 0) //遍歷資料報
pkt_offset += 16 + ptk_header->caplen; //下乙個資料報的偏移值
memset(eth_header , 0, 14);
//資料幀頭 14字為ethnet協議大小,注意指定網絡卡抓包 不指定是16位元組的linuxcooked
if(fread(eth_header, 14, 1, pfile) != 1) //讀ethernet資料
if(eth_header->frametype != 0x0008)
else
}//ip資料報頭 20位元組 不考慮》20位元組
memset(ip_header, 0, sizeof(ipheader_t));
if(fread(ip_header, sizeof(ipheader_t), 1, pfile) != 1)
quintet->srcip = ip_header->srcip;
quintet->dstip = ip_header->dstip;
quintet->protocol = ip_header->protocol;
memset(tcp_header,0,sizeof(tcpheader_t));
memset(udp_header,0,sizeof(udpheader_t));
if(ip_header->protocol == 0x06) //判斷是否是 tcp 協議
quintet->srcport = tcp_header->srcport;
quintet->dstport = tcp_header->dstport;
}else if(ip_header->protocol == 0x11)//udp
quintet->srcport = udp_header->srcport;
quintet->dstport = udp_header->dstport;
}fwrite(quintet,13,1,output);
} // end while
fclose(pfile);
fclose(output);
printf("finish!\n");
return 0;
}
pcap檔案解析 pcap檔案頭與包檔案頭(一)
前段時間接到乙個公司關於解析pacp檔案的培訓 我是被培訓的 在完成了一部分的功能後決定把一些關於pcap檔案的了解記錄到部落格中。在開始讀取pcap檔案之前,先讓我們來看看pcap檔案的大概結構。如上圖所示在乙個pcap檔案中存在1個pcap檔案頭和多個資料報,其中每個資料報都有自己的頭和包內容。...
Pcap檔案格式解析
一 24位元組pcap檔案頭 乙個檔案只有乙個 linktype為鏈路層型別,決定資料幀頭結構,其他沒啥用 typedef struct pcapfileheader pcapfileheader t 二 pcap包頭 乙個檔案可以有很多個包 時間戳 typedef struct pcaptime ...
gulp批量打包檔案並提取公共檔案
gulp是前端開發過程中對 進行構建的工具,是自動化專案的構建利器。browseriyf是模組化打包工具。一般情況下,browserify 會把所有的模組打包成單個檔案。單個檔案在大多數情況下是適用的,可以減少 http 請求數量,提高效能。不過在其他一些情況下,打包的單個檔案可能過大,使得頁面的初...