解析pcap檔案並提取其中五元組

2021-09-12 16:26:57 字數 2292 閱讀 2548

最近在學習分析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 請求數量,提高效能。不過在其他一些情況下,打包的單個檔案可能過大,使得頁面的初...