【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 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- wc命令行程序
软件的需求分析 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 - ...
- Sublime Text添加插入带当前时间说明
Sublime Text添加插入带当前时间说明 作者:木尘 日期:2014-11-25 插件实现插入带时间功能的说明: 1. 创建插件: Tools → New Plugin: import da ...
- Alpha、伪Beta 发布后,严一格的个人感想与体会
伪Beta发布在4月15日下午2.30左右结束,严一格所在的“爆打”团队产品发布成功.下面是我的想法和体会~ 1.作为“爆打”团队中的一员,我对我们团队可以成功发布Alpha版本和伪Beta版本感到由 ...
- BOM之screen对象
前面的话 screen对象在javascript编程中,比较冷门,不太常用.screen对象用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.本文将详细介绍screen对 ...
- 【设计模式】——抽象工厂Abstract Factory
模式意图 提供对象的使用接口,隐藏对象的创建过程. 模式结构 AbstractFactory 提供创建对象的接口. ConcreteFactory 提供真正创建对象的实现类,用于组合并创建不同的对象, ...
- Antenna Placement POJ - 3020 (最小边集覆盖)
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10699 Accepted: 526 ...
- IntelliJ IDEA2017 修改缓存文件的路径
IDEA的缓存文件夹.IntelliJIdea2017.1,存放着IDEA的破解密码,各个项目的缓存,默认是在C盘的用户目录下,目前有1.5G大小.现在想要把它从C盘移出. 在IDEA的安装路径下中, ...
- MT【203】连续型的最值
(北大自招)已知$-6\le x_i\le 10 (i=1,2,\cdots,10),\sum\limits_{i=1}^{10}x_i=50,$当$\sum\limits_{i=1}^{10}x^2 ...
- 【刷题】LOJ 6226 「网络流 24 题」骑士共存问题
题目描述 在一个 \(\text{n} \times \text{n}\) 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的 \(\t ...
- 【转】电源芯片选型,容易忽略的“QC”
某公司自主研发的智能水表刚上市半年,随后此产品陆续接到用户投诉没电的情况,公司售后不得不花大量人力到用户现场更换电池,处理异常,导致公司损失惨重.但是该产品说明书中标称电池可以工作三年,为何半年左右电 ...