1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7. unsigned int magic_number;
  8. unsigned short version_major;
  9. unsigned short version_minor;
  10. unsigned int thiszone;
  11. unsigned int sigfigs;
  12. unsigned int snaplen;
  13. unsigned int network;
  14. }pcap_hdr_t;
  15.  
  16. typedef struct
  17. {
  18. unsigned int ts_sec;
  19. unsigned int ts_usec;
  20. unsigned int incl_len;
  21. unsigned int orig_len;
  22. }pkt_hdr_t;
  23.  
  24. FILE *pcap_fd = NULL;
  25. unsigned char input_buf[] = {};
  26. unsigned char output_buf[] ={};
  27. int input_len = , output_len = ;
  28.  
  29. int hexdump(unsigned char *name, unsigned char *data, unsigned short len)
  30. {
  31. int i, j, p, ret, tmp_len = ;
  32. static unsigned char dump_buf[] = {};
  33. printf("hexdump(%s len=%d)\r\n", name, len);
  34. memset(dump_buf, 0x00, sizeof(dump_buf));
  35.  
  36. for (i = , j = , p = ; i < len; i++)
  37. {
  38. ret = sprintf( (dump_buf + p), " %02x", *(data + i) );
  39. p += ret;
  40. j++;
  41. if(j >= )
  42. {
  43. printf("%s\r\n", dump_buf);
  44. j = ;
  45. p = ;
  46. }
  47. }
  48. if(p > )
  49. printf("%s\r\n", dump_buf);
  50. return ;
  51. }
  52.  
  53. int file_size(FILE *fd)
  54. {
  55. int cur, len;
  56. cur = ftell(fd);
  57. fseek(fd, , SEEK_END);
  58. len = ftell(fd);
  59. fseek(fd,cur, SEEK_SET);
  60. return len;
  61. }
  62.  
  63. int wpkt(unsigned char *buf, int size)
  64. {
  65. int ret;
  66. ret = fwrite(buf, size, , pcap_fd);
  67. if(ret != )
  68. printf("fwrite %d %d err \n", size, ret);
  69. return ;
  70. }
  71.  
  72. int pcap_deinit(void)
  73. {
  74. fclose(pcap_fd);
  75. return ;
  76. }
  77.  
  78. int eth_pcap(unsigned char *pkt, int len)
  79. {
  80. pkt_hdr_t pkt_hdr = {};
  81.  
  82. pkt_hdr.incl_len = pkt_hdr.orig_len = len;
  83. wpkt((unsigned char *)(&pkt_hdr), sizeof(pkt_hdr));
  84. wpkt(pkt, len);
  85. return ;
  86. }
  87.  
  88. int pcap_init(int pkt_type, unsigned char *file)
  89. {
  90. pcap_hdr_t pcap = {};
  91.  
  92. pcap_fd = fopen(file, "wb+");
  93. if(NULL == pcap_fd)
  94. {
  95. printf("create %s err\n", file);
  96. return -;
  97. }
  98. printf("create %s file\r\n", file);
  99. pcap.magic_number = 0xa1b2c3d4;
  100. pcap.snaplen = 0x900;
  101. pcap.version_major = ;
  102. pcap.version_minor = ;
  103. pcap.network = pkt_type;//105,1
  104. wpkt((unsigned char *)(&pcap), sizeof(pcap));
  105. return ;
  106. }
  107.  
  108. int main(int argc, char *argv[])
  109. {
  110. FILE *fd;
  111. unsigned char ch, *token, *delim = " ,";
  112. int i, ret,pkt_type;
  113.  
  114. argc--;
  115. argv++;
  116. /*hex2pkt -mac -i frame.hex -o mac.pcap*/
  117. do
  118. {
  119. if( == strcmp(argv[], "-eth"))
  120. {
  121. pkt_type = ;
  122. }
  123. else if( == strcmp(argv[], "-mac"))
  124. {
  125. pkt_type = ;
  126. }
  127. else if( == strcmp(argv[], "-i"))
  128. {
  129. argv++;
  130. argc--;
  131. fd = fopen(argv[], "rb");
  132. printf("-i %s\r\n", argv[]);
  133. input_len = file_size(fd);
  134. ret = fread( input_buf, input_len, , fd );
  135. if( != ret)
  136. printf("fread err ret %d\r\n", ret);
  137. printf("input_buf(len=%d):\r\n%s\r\n", input_len, input_buf);
  138. fclose(fd);
  139. }
  140. else if( == strcmp(argv[], "-o"))
  141. {
  142. argv++;
  143. argc--;
  144. for( token = strtok(input_buf, delim), output_len=; token != NULL; token = strtok(NULL, delim) )
  145. {
  146. sscanf(token, "%x", &output_buf[output_len++]);
  147. }
  148. hexdump("output", output_buf, output_len);
  149. pcap_init(pkt_type, argv[]);
  150. eth_pcap(output_buf, output_len);
  151. pcap_deinit();
  152. }
  153. else
  154. {
  155. printf("unknow cmd %s\r\n", argv[]);
  156. }
  157. argv++;
  158. argc--;
  159. }
  160. while(argc);
  161.  
  162. return ;
  163. }

hex2pcap的更多相关文章

  1. AireOS WLC配置抓包

    这个Note主要列举在AireOS WLC上如何抓包.它实现的步骤也相对比较简单: 1.开启debug packet, 2.有数据被抓取到时,会以16进制的形式在WLC上输出, 3.我们将输出信息保存 ...

随机推荐

  1. mongodb重点知识总结

    Mongodb总结 一.NoSQL型数据库介绍 NoSQL,泛指非关系型的数据库.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题.NoSQL(NoSQL ...

  2. 【LGR-061】洛谷10月月赛 II & X Round 4 Div.1&Div 2

    X Round的题目质量还是一如既往的高 然而每次周末我都要写作业没法用心打233主要是被陈指导放了鸽子 占坑代填(最近坑开的有点多)

  3. iOpenWorskSDK下载和答疑贴

    1 iOpenWorksSDK对VS2013-VS2017的支持插件 https://files.cnblogs.com/files/baihmpgy/iOpenWorksSDK.vsix.zip 2 ...

  4. 基于Django的Rest Framework框架的解析器

    本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有appli ...

  5. 常用的app包名和类名

    应用 包名 启动类 QQ com.tencent.mobileqq com.tencent.mobileqq.activity.HomeActivity 微信 com.tencent.mm com.t ...

  6. RPA中房产证的 OCR 识别

    客户需求,识别一些证件内容,包括身份证.户口本.营业执照.银行卡以及房产证,前四个比较容易实现,不管是艺赛旗的 RPA 还是百度的 OCR 都有接口,直接调用即可,但是都没有房产证的 OCR 识别,只 ...

  7. GO 数组

    一.数组(Array) 1.1 什么是数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. ...

  8. go-数据结构

    数据结构 数据结构(算法)的介绍 数据结构的介绍 1) 数据结构是一门研究算法的学科,只从有了编程语言也就有了数据结构.学好数据结构可以编写 出更加漂亮,更加有效率的代码. 2) 要学习好数据结构就要 ...

  9. 合格的施工图是如何绘制的?必须要get这四点,大多数人都不知道

    对于工程设计师来说加班通宵赶图改图是常有的事情,如何绘制一套合格的施工图?这是很多工程设计师都会问的问题. 绘制一套合格的施工图,你需要注意以下四点: 一.明确施工图的作用和目的 1. 工程设计的细化 ...

  10. JS基础语法---一元运算符

        *    ++  -- 都是运算符     *    ++ 和 --  可以分为:前+ 和后+  and   前- 和后-          *  如果++在后面:如: num++ +10参与 ...