十六進制報文用wireshark打開

有時候分析十六進制的報文,實在費勁,就想了個辦法,把它轉成wireshark能夠打開的文件, 另外wireshark也有 text2pcap程序(可是必須固定格式的原文本,不方便)
如下是本身隨便寫了一個源碼,編譯成小工具,就能夠方便使用了, linux環境下經過.

直接複製代碼可能有錯,error: stray 則說明文件爲「帶BOM頭的UTF8」編碼格式,相應的解決方法是將文件轉換爲「不帶BOM頭的UTF8」編碼格式,Notepad++就帶有這樣的功能
// hex2pcap.c :

#include<stdio.h> #include<string.h> #include<stdlib.h> /*just for demo, auther: xu qipeng*/ int main(int argc,char **argv) { char buf[100],*p;
   // .pcap文件有本身的格式,佔40字節, 這裏先 hard code char *pcap_format = "D4C3B2A1020004000000000000000000FFFF00000100000000000000000000004000000040000000"; char pcap_hdr[40]; FILE *fp;  //輸出文件的指針 char b; int i = 0; char total = 0, n = 0; memset(buf,0,sizeof(buf)); memset(pcap_hdr,0,sizeof(pcap_hdr)); if((fp=fopen("pcap.pcap","w"))==NULL) { printf("open error!\n"); exit(0); } p = pcap_format; for(i=0; i< 40; i++) { sscanf(p,"%02hhx",&pcap_hdr[i]);//hhx表示一個佔8位的十六進制數 p+=2; fputc(pcap_hdr[i],fp); //先把pcap頭部寫入文件 } while(fgets(buf,sizeof(buf),stdin)!=NULL) //從標準輸入讀文本 { p = buf; while(p!=NULL) { if((n = sscanf(p,"%hhx",&b)) < 0) break; total += n; fputc(b,fp); if((p=strstr(p," "))!=NULL) { p++; if(strncmp(p," ",1)==0) { printf("warning format with three space... \r\n"); p++; if(strncmp(p," ",1)==0) { printf("error format with three space... \r\n"); fclose(fp); exit(0); } } } } memset(buf,0,sizeof(buf)); } fseek(fp, 0, SEEK_SET); pcap_hdr[32] = pcap_hdr[36] = total; //32字節,36字節表示長度 for(i=0; i< 40; i++) { fputc(pcap_hdr[i],fp);  //前面把pcap頭部寫入文件了, 這裏over write一下 } fclose(fp); return 0; }

gcc -o hex2pcap    hex2pcap.c  生成程序linux

 

測試:hex是一個文本文件,空格隔開的,行末每空格,hex2pcap   是編譯出的程序,以下執行完後生成pcap.pcap,就能夠用wireshark打開pcap.pcap文件了工具

相關文章
相關標籤/搜索