场景

下载样本,都是MD5命名的无后缀文件,需要自己手动查询然后修改文件后缀。

根据文件类型自定义后缀可以很方便地根据后缀判断用什么工具分析。

使用说明

libmagic

地址:https://pypi.org/project/python-magic-bin/0.4.14/

根据系统版本选择安装程序

https://pypi.org/project/python-magic-bin/0.4.14/#files

如果是windows版本,下载python_magic_bin-0.4.14-py2.py3-none-win32.whl

安装

pip install python_magic_bin-0.4.14-py2.py3-none-win32.whl

运行结果

- 自定义后缀前

D:\test>01Malware_identification_extension.py
[!!! need extension define !!!]libmagic.dll ==> PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
[!!! need extension define !!!]magic.mgc ==> magic binary file for file(1) cmd (version 14) (little endian)
file count: 2 - 自定义后缀后 D:\test>01Malware_identification_extension.py
libmagic.dll ==> PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
[!!! need extension define !!!]magic.mgc ==> magic binary file for file(1) cmd (version 14) (little endian)
file count: 2

其中need extension define是未指定后缀格式所以显示的提示,可以通过修改config.ini来自定义要改名的后缀。然后自动改文件名。

代码实现

#!/usr/bin/python
# -*- coding: UTF-8 -*- # 第三方库 https://pypi.org/project/python-magic-bin/0.4.14/
import os
import magic
import sys
reload(sys)
sys.setdefaultencoding('utf8') # 识别格式的字典
identification_dict = {} # 读取文件函数
def read_file(file_path):
if not os.path.exists(file_path):
print 'Please confirm correct filepath !'
sys.exit(0)
else:
with open(file_path, 'r') as source:
for line in source:
line = line.rstrip('\r\n').rstrip('\n')
key = line.split(':')[0]
value = line.split(':')[1]
identification_dict[key] = value #ip_list.append(line.rstrip('\r\n').rstrip('\n')) # 后缀增加
def ident_extension(var):
# 自定义增加后缀方法
# '文件描述':'.后缀',
return identification_dict.get(var,False) #'error'为默认返回值,可自设置 # 增加文件后缀名
def change_filename(filepath,filemime):
# 如果原来就有后缀,就不修改了
# portion = os.path.splitext(filepath)
# if len(portion[1])>0:
# return False # 如果后缀在数据库中就改名
if ident_extension(filemime) != False :
portion = filepath + ident_extension(filemime)
os.rename(filepath,portion)
return True
else:
return False if __name__ == '__main__':
# 读取配置文件存放进字典
read_file(os.getcwd()+'//config.ini')
# 存放的路径
path = os.getcwd()+'//sample'
# 判断目录是否存在
if os.path.exists(path) == False:
print u'usage:需要把无后缀名的样本放入sample目录内,与脚本放置在一起,config.ini是根据文件描述自定义后缀的配置文件'
print u'C:.'
print u'└─identification_extension.py'
print u'│'
print u'└─sample'
# 遍历目录内文件名
nCout = 0 # 文件计数
#path_text = open('path.txt', 'w') # 将文件名写入文本
for fpathe, dirs, fs in os.walk(path): # 遍历路径
for f in fs: # 遍历文件名
nCout = nCout + 1 # 计数器增加
# 识别单个后缀函数
mimetype = magic.from_file(os.path.join(fpathe, f))
if change_filename(os.path.join(fpathe, f),mimetype): # 修 改文件后缀
print f + '\t==>\t' + mimetype
else:
print '[!!! need extension define !!!]' + f + '\t==>\t' + mimetype
print 'file count: {0}'.format(nCout) # 打印计数器

效果

【Pyhon】获取文件MIME类型,根据文件类型自定义文件后缀的更多相关文章

  1. php获取文件mime类型Fileinfo等方法

    前几天写到使用wordpress xmlrpc api远程发布文章,如果本地服务器的文章库里某一篇待发表的wordpress文章包含图片文件时,就会使用到WordPress上传文件的API metaW ...

  2. php 获取文件mime类型的方法

    php 获取文件mime类型的方法 使用fileinfo需要安装php_fileinfo扩展. 如已安装可以在extension_dir目录下找到php_fileinfo.dll(windows),f ...

  3. 使用libmagic确定文件MIME类型【示例】【转】

    原文地址:http://blog.csdn.net/vevenlcf/article/details/46122661 使用libmagic确定文件MIME类型[示例] 引用:   <http: ...

  4. java中得到文件MIME类型的几种方法(转)

     本文转载自:http://hotsunshine.iteye.com/blog/857485 使用 javax.activation.MimetypesFileTypeMap 需要引入activat ...

  5. Mime类型与文件后缀对照表及探测文件MIME的方法

    说明:刚刚写了一篇<IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下载>的文章,网址:http://blog.csdn.net/zhoufoxcn/archive/ ...

  6. 常见文件MIME类型

    常见文件MIME类型.asx,video/x-ms-asf .xml,text/xml .tsv,text/tab-separated-values .ra,audio/x-pn-realaudio ...

  7. js 获取input type="file" 选择的文件大小、文件名称、上次修改时间、类型等信息

    文件名的传递 ---全路径获取 $('#file').change(function(){ $('#em').text($('#file').val()); }); 文件名的传递 ---只获取文件名 ...

  8. 关于finfo_file函数获取文件mime值验证出错的问题

    今天在做图片上传 验证图片mime值时 突然发现  个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...

  9. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 第二阶段冲刺——two

    个人任务: 王金萱:优化作业查询结果,按学号排列. 马佳慧:测试登录功能并优化. 司宇航:修复博客作业查询功能. 季方:测试博客作业查询功能. 站立会议: 任务看板和燃尽图:

  2. 对《OA云》作品的分析

    对<OA云>作品的分析 软件描述:<OA云>是一款基于移动端的企业日常事物办公软件,企业人员进入该产品后可以对当天的出勤情况进行签到,系统会自动的识别以及记录下员工的实时签到信 ...

  3. (Alpha)Let's-典型用户和场景&功能规格说明书

    典型用户和场景 Personal/典型用户 名字 阿王 性别.年龄 男.20 职业 学生 收入 无 知识层次和能力 大学学生,善于乐于使用电脑.手机 生活/工作情况 上学 动机.目的.困难 感到大学生 ...

  4. 在iOS9 中使用3D Touch

    iOS9提供了四类API( Home Screen Quick Action . UIKit Peek & Pop . WebView Peek & Pop 和 UITouch For ...

  5. Linux版本CentOS、Ubuntu和Debian的异同

    Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本. 商业版本以Redhat为代表,开源社区版本则以debian为代表. #Ubuntu系统 U ...

  6. Linux命令(二十七) 用户组管理命令

    Linux提供了一系列的命令管理用户组.用户组就是具有相同特征的用户集合.每个用户都有一个用户组,系统能对一个用户组中所有用户进行集中管理,通过把相同属性的用户定义到同一用户组,并赋予该用户自一定的操 ...

  7. confluence

    Confluence Confluence是一个专业的wiki程序.它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享. Confluence不是一个开源软件,非商业用途可以免费使用. ...

  8. Vue---导航守卫使用方法详解

    导航守卫 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的. 记住参数或查询的改变并不会触发进 ...

  9. Java之List使用场景

    1.List使用场景 特点: ①在 List集合中允许出现 重复元素 <通过元素的equals方法,来比较是否为重复的元素.> ②所有元素是以一种 线性方式进行存储 ③List集合还有一个 ...

  10. [JZOJ 5402] God Knows

    终于搞完了这乡里别题目 $ $ 考虑一个 \(dp\) ,设 \(f[i]\) 表示最后一个匹配选 \((i,p[i])\) 的最小费用 首先我们考虑答案长什么样 假设根据 \(p[i]\) 排序 , ...