作家
登录

从nginx日志原始二进制数据还原文件

作者: 来源: 2017-12-21 12:06:39 阅读 我要评论

  • >>> pb = re.compile('\\\\x0D\\\\x0A--.*$'
  • >>> data = re.sub(pf,'',data) 
  • >>> data 
  • "\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00 ... \\xBC'\\xF1\\x8C\\xCC\\x83,\\xFAo\\xD2_\\xA0\\x1A\\x7F\\xFF\\xD9\\x0D\\x0A--SgX5AyE7dwyg0smH-Tqpt-ggGQwTU9--\\x0D\\x0A | 42097 | - | - | - | 1.1.1.1 | d1fkkbcd02eb | 127.0.0.1:8888 | 0.034 | 0.123" 
  • >>> data = re.sub(pb,'',data) 
  • >>> data 
  • "\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00 ... \\xBC'\\xF1\\x8C\\xCC\\x83,\\xFAo\\xD2_\\xA0\\x1A\\x7F\\xFF\\xD9" 
    1. - | 09/Dec/2017:08:00:19 +0000 | POST /some/api HTTP/1.1 | 200 | 461 | 
    2. --SgX5AyE7dwyg0smH-Tqpt-ggGQwTU9 
    3. \x0D\x0AContent-Disposition: form-data; name=\x22name\x22\x0D\x0AContent-Type: text/plain; charset=UTF-8\x0D\x0A\x0D\x0value\x0D\x0A 
    4. --SgX5AyE7dwyg0smH-Tqpt-ggGQwTU9 
    5. \x0D\x0AContent-Disposition: form-data; name=\x22file\x22; filename=\abc.jpg\x22 
    6. \x0D\x0AContent-Type: application/octet-stream 
    7. \x0D\x0AContent-Transfer-Encoding: binary\x0D\x0A\x0D\x0A\xFF\xD8\xFF\xE0\x00\x10JFIF\x00 ... \xD2_\xA0\x1A\x7F\xFF\xD9\x0D\x0A 
    8. --SgX5AyE7dwyg0smH-Tqpt-ggGQwTU9-- 
    9. \x0D\x0A | 42097 | - | - | - | 1.1.1.1 | d1fkkbcd02eb | 127.0.0.1:8888 | 0.034 | 0.123 

    如许的匹配处理并不严谨,假设原始数据中本来就含有\\x0D\\x0A--的话,就会损掉原始数据,但今朝为止还没碰到这种情况有效。更麻烦的做法是先匹配出表单瓜分字符串,然后以此为界朋搀扶数据后,再删除两边多余的字符和回车换行。

    成功提掏出原始数据后,对数据进行解码,并写入.jpg文件。如不雅没有解码这一步,所有的数据都邑被当做字符串写入文件,而不会被当成转义字符。简单做个测试:

    把"\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01"保存到文件test.log。

    1. >>> f = open('test.log''rb'
    2. >>> data = f.read() 
    3. >>> data 
    4. '\\xFF\\xD8\\xFF\\xE0\\x00\\x10JFIF\\x00\\x01\n' 
    5. >>> print data 
    6. \xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01 
    7.  
    8. >>> import codecs as c 
    9. >>> c.decode(data, 'string_escape'
    10. '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\n' 
    11. >>> print c.decode(data, 'string_escape'
    12. ����JFIF 
    13.  
    14. >>> 

    攫取的原始数据是两根反斜杠,print时因为反斜杠被转义成字符,所以变成一根。解码后的数据本身只有一根斜杠,print时打印出转义字符本身,也就是乱码。


      推荐阅读

      百度ABC数据中心上线:基于单路AMD EPYC

    【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?AMD、百度12月14日结合宣布,基于AMD EPYC办事器平台的百度人工智能、大年夜数据、云计算(ABC)数据中间办事已经正式上线。>>>详细阅读


    本文标题:从nginx日志原始二进制数据还原文件

    地址:http://www.17bianji.com/lsqh/40037.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)