【Pyhon】获取文件MIME类型,根据文件类型自定义文件后缀
场景
下载样本,都是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类型,根据文件类型自定义文件后缀的更多相关文章
- php获取文件mime类型Fileinfo等方法
前几天写到使用wordpress xmlrpc api远程发布文章,如果本地服务器的文章库里某一篇待发表的wordpress文章包含图片文件时,就会使用到WordPress上传文件的API metaW ...
- php 获取文件mime类型的方法
php 获取文件mime类型的方法 使用fileinfo需要安装php_fileinfo扩展. 如已安装可以在extension_dir目录下找到php_fileinfo.dll(windows),f ...
- 使用libmagic确定文件MIME类型【示例】【转】
原文地址:http://blog.csdn.net/vevenlcf/article/details/46122661 使用libmagic确定文件MIME类型[示例] 引用: <http: ...
- java中得到文件MIME类型的几种方法(转)
本文转载自:http://hotsunshine.iteye.com/blog/857485 使用 javax.activation.MimetypesFileTypeMap 需要引入activat ...
- Mime类型与文件后缀对照表及探测文件MIME的方法
说明:刚刚写了一篇<IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下载>的文章,网址:http://blog.csdn.net/zhoufoxcn/archive/ ...
- 常见文件MIME类型
常见文件MIME类型.asx,video/x-ms-asf .xml,text/xml .tsv,text/tab-separated-values .ra,audio/x-pn-realaudio ...
- js 获取input type="file" 选择的文件大小、文件名称、上次修改时间、类型等信息
文件名的传递 ---全路径获取 $('#file').change(function(){ $('#em').text($('#file').val()); }); 文件名的传递 ---只获取文件名 ...
- 关于finfo_file函数获取文件mime值验证出错的问题
今天在做图片上传 验证图片mime值时 突然发现 个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- 20135316王剑桥Linux内核学习笔记第四周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 1.内核态:在高执行级别,代码可 ...
- 剑指offer:二叉树的镜像
题目描述: 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / ...
- ElasticSearch 2 (14) - 深入搜索系列之全文搜索
ElasticSearch 2 (14) - 深入搜索系列之全文搜索 摘要 在看过结构化搜索之后,我们看看怎样在全文字段中查找相关度最高的文档. 全文搜索两个最重要的方面是: 相关(relevance ...
- Sublime Text添加插入带当前时间说明
Sublime Text添加插入带当前时间说明 作者:木尘 日期:2014-11-25 插件实现插入带时间功能的说明: 1. 创建插件: Tools → New Plugin: import da ...
- Linux命令(十一) 显示文件类型 file
命令介绍 file 命令是用来显示文件的类型,对于每个给定的参数,该命令试图将文件分类,分辨的类型有文本文件.可执行文件.压缩文件.或其它可理解的数据格式. 常用参数介绍 -b 不显示文件名称,只显示 ...
- C++ main()函数及其参数
1.首先,想想C/C++在main函数之前和之后会做些什么? 我们看看底层的汇编代码: __start: : init stack; init heap; open stdin; open stdou ...
- 一本通1649【例 2】2^k 进制数
1649:[例 2]2^k 进制数 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 原题来自:NOIP 2006 提高组 设 r 是个 2k 进制数,并满足以 ...
- BZOJ2561 最小生成树(最小割)
考虑kruskal的过程:按边权从小到大考虑,如果这条边的两端点当前不连通则将其加入最小生成树.由此可以发现,某条边可以在最小生成树上的充要条件是其两端点无法通过边权均小于它的边连接. 那么现在我们需 ...
- ubuntu关闭和开启防火墙
1.关闭ubuntu的防火墙 ufw disable 2开启防火墙 ufw enable 3.卸载了iptables apt-get remove iptables 4.关闭ubuntu中的防火墙的其 ...
- Steady Cow Assignment POJ - 3189 (最大流+匹配)
Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns which ...