场景

下载样本,都是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. Tomcat下bootstrap启动分析

    "C:\Program Files\Java\jdk1.7.0\bin\javaw.exe" -agentlib:jdwp=transport=dt_socket,suspend= ...

  2. 移动硬盘插到台式机,外接网卡无法连接wifi处理

    在网上买了一个希捷500G的移动硬盘,避免供电不足,硬盘需要插到台式机后面,高高兴兴的通过USB连接了,发现硬盘可以用,然后打算网上查询是否正品,发现不能连接网络了,我是台式机,用360wifi作为无 ...

  3. contentInsetAdjustmentBehavior各个值之间的区别

    iOS11也出了不少时候了网上说适配的文章一大堆.关于contentInsetAdjustmentBehavior这个参数之间的区别,好像没什么人能说明.往下看的前提是你已经知道什么是安全区域,没看明 ...

  4. P3000 [USACO10DEC]牛的健美操Cow Calisthenics

    题目描述 Farmer John continues his never-ending quest to keep the cows fit by having them exercise on va ...

  5. Oracle 查看正在执行的SQL语句

    SELECT A.MACHINE, username,a.SID,a.SERIAL#, sql_text,LOGON_TIME from v$session a, v$sql b where a.sq ...

  6. 大数据高性能数据库Redis在Windows上的使用教程

    Redis学习笔记----Redis在windows上的安装配置和使用 Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括s ...

  7. 【洛谷P2921】Trick or Treat on the Farm

    题目大意:给定一个 N 个节点的内向树森林,求从每个顶点出发能够到达的最多不重复顶点的个数是多少. 题解:内向树森林是由一个或若干个环加若干条链构成.可以先按照类似于拓扑排序的规则进行删链,再对环上的 ...

  8. 前端常用功能记录(二)—datatables表格

    并不是所有的后台开发都有美工和前端工程师来配合做页面,为了显示数据并有一定的美感,jQuery的DataTables插件对于像我这样的前端菜鸟来说真是雪中送炭,当然对于专业的前端开发者来说它更是锦上添 ...

  9. HDU 6153 扩展kmp

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total ...

  10. pthread_detach pthread_create实例

    //pool.h 1 #ifndef POOL_H #define POOL_H #include <pthread.h> class pool { public: pool(); ~po ...