十六进制报文用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  生成程序

 

测试:hex是一个文本文件,空格隔开的,行末每空格,hex2pcap   是编译出的程序,如下执行完后生成pcap.pcap,就可以用wireshark打开pcap.pcap文件了

转载于:https://www.cnblogs.com/niyoulaipianwo/p/6497394.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值