hair_man
2015-08-04 02:37
采纳率: 51.6%
浏览 3.3k
已采纳

如何将一串十六进制字符使用C语言写到.pcap文件并使用wireshark打开

提示数据包过大怎么回事
例如将下面这一个网络抓取的数据包的十六进制字符串写进.pcap文件。
BE 03 00 00 40 00 00 00 AC 23 00 00 A4 09 00 00 30 DD 19 1F 41 CB D0 01 6E 00 D6 2E 29 47 09 46 B4 23 3E E7 BC D6 78 EF E9 03 00 10 04 00 00 00 01 00 00 C0 02 06 00 80 7E 01 00 00 28 02 00 00 A1 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 01 80 00 00 6E 03 00 0C 00 00 00 0C 00 00 00 62 03 00 00 B0 83 FE A7 2A 5E 88 25 93 02 28 B9 08 00 45 74 03 54 5B 5E 40 00 32 06 E8 12 7B 81 C4 2A C0 A8 01 6B 37 E5 77 7F 66 C1 44 66 E1 01 90 4D 50 18 16 D0 C7 C8 00 00 00 00 03 2C 00 AB 41 30 00 32 00 00 00 01 5B 4C 69 76 65 44 65 66 61 75 6C 74 43 6F 6E 66 69 67 5D 0D 0A 41 64 76 65 72 74 43 6F 75 6E 74 3D 31 30 0D 0A 41 75 74 6F 50 72 65 44 6F 77 6E 50 32 50 53 70 65 65 64 4C 69 6D 69 74 48 74 74 70 3D 35 31 32 30 30 0D 0A 46 72 65 65 48 74 74 70 53 74 61 72 74 54 69 6D 65 3D 33 0D 0A 46 72 65 65 48 74 74 70 53 74 6F 70 54 69 6D 65 3D 31 31 0D 0A 47 4E 45 54 69 6D 65 3D 33 0D 0A 47 4E 53 54 69 6D 65 3D 31 31 0D 0A 4C 69 76 65 46 69 72 73 74 48 74 74 70 42 75 66 66 65 72 54 69 6D 65 3D 33 30 0D 0A 69 45 6E 61 62 6C 65 50 72 65 70 75 73 68 3D 31 0D 0A 69 48 65 61 72 74 42 65 61 74 4D 61 78 46 61 69 6C 54 69 6D 65 73 3D 33 0D 0A 69 48 65 61 72 74 42 65 61 74 54 69 6D 65 4D 73 3D 32 35 30 30 30 0D 0A 69 4C 6F 67 69 6E 52 74 79 4D 61 78 54 69 6D 65 73 3D 35 0D 0A 69 4C 6F 67 69 6E 52 74 79 54 69 6D 65 4D 73 3D 33 30 30 30 0D 0A 69 4D 69 6E 50 65 65 72 43 6F 75 6E 74 3D 32 30 0D 0A 69 50 72 65 70 75 73 68 44 6F 77 6E 6C 6F 61 64 53 70 65 65 64 3D 31 30 32 34 30 30 30 0D 0A 69 50 72 65 70 75 73 68 44 6F 77 6E 6C 6F 61 64 54 69 6D 65 4F 75 74 3D 36 30 30 0D 0A 69 50 72 65 70 75 73 68 4D 6F 75 73 65 4D 6F 76 65 49 6E 74 65 72 76 61 6C 3D 36 30 0D 0A 69 50 72 65 70 75 73 68 51 75 65 72 79 49 6E 74 65 72 76 61 6C 3D 36 30 30 0D 0A 69 50 72 65 70 75 73 68 51 75 65 72 79 55 70 64 61 74 65 49 6E 74 65 72 76 61 6C 3D 34 33 32 30 30 0D 0A 69 50 72 65 70 75 73 68 52 65 74 72 79 54 69 6D 65 73 3D 33 0D 0A 69 50 72 65 70 75 73 68 53 74 6F 72 61 67 65 53 69 7A 65 3D 35 30 30 0D 0A 69 50 75 6E 63 68 52 74 79 4D 61 78 54 69 6D 65 73 3D 32 0D 0A 69 50 75 6E 63 68 52 74 79 54 69 6D 65 4D 73 3D 31 30 30 30 0D 0A 69 53 65 6C 65 63 74 54 69 6D 65 4F 75 74 4D 73 3D 31 30 30 30 0D 0A 69 53 68 61 72 65 50 65 65 72 3D 30 0D 0A 6E 45 6D 65 72 67 65 6E 63 79 54 69 6D 65 3D 31 35 0D 0A 75 41 75 74 6F 50 72 65 44 6F 77 6E 50 32 50 53 70 65 65 64 4C 69 6D 69 74 48 74 74 70 56 49 50 3D 31 30 32 34 30 30 30 30 30 0D 0A 75 4C 69 6D 69 74 54 69 6D 65 45 6E 64 3D 32 34 0D 0A 75 4C 69 6D 69 74 54 69 6D 65 53 74 61 72 74 3D 31 39 0D 0A 75 4D 61 78 4E 65 77 41 64 64 50 65 65 72 3D 33 38 34 0D 0A 75 4D 69 6E 54 69 6D 65 4F 75 74 42 75 66 66 65 72 3D 33 30 30 30 0D 0A 75 50 34 50 55 72 6C 46 72 65 65 48 74 74 70 4F 70 65 6E 3D 30 0D 0A 75 69 52 65 70 6F 72 74 53 6F 75 72 63 65 43 6F 75 6E 74 3D 32 35 36 0D 0A 75 69 53 74 6F 70 50 32 50 54 69 6D 65 3D 31 30 0D 0A 76 6F 64 5F 63 6E 74 3D 31 32 38 0D 0A

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • hair_man 2015-08-21 09:00
    已采纳

    如果这些数据完成时pcap文件的十六进制文件,那么按照给出代码的回答直接写入文件是正确的,但是由于这些数据仅仅只是pcap文件下,除去数据头的十六进制数据,所以如果直接写入文件还是会产生错误,经过不断地测试,最终放弃按照pcap结构体,将数据赋值后写入文件,因为总是存在一些大大小小的bug,最后确定还是使用libpcap,详细:

                        http://ask.csdn.net/questions/199693
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • My_It5224 2015-08-04 06:39
    评论
    解决 无用
    打赏 举报
  • 零度永恒 2015-08-06 09:25

    不知道这是不是你想要的

     unsigned char *p, dataBuf[dataLen];
     int i;
     char ch[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
     char wbuf[3];
    
     p = dataBuf;
     i = 0;
     wbuf[2] = ' ';
     while(i < dataLen)
     {
       wbuf[0] = ch[(((*p)>>4)&0x0F)];
         wbuf[1] = ch[((*p)&0x0F)];
         fwrite(file, wbuf, 3);
         p++;
     }
    
    评论
    解决 无用
    打赏 举报
  • devmiao 2015-08-06 21:17

    用C#很简单,只要两行
    string s = "BE 03 00 00 40 00 00 00...";
    File.WriteAllBytes("x:\1.pcap", s.Split(' ').Select(x => Convert.ToByte(x, 16)).ToArray());

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题