【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 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- 构建之法——Team & Scrum & MSF
第五章(团队和流程)83-99 这一章主要介绍的是团队精神 那是不是说只要能组合在一起的就是组成了一个团队了?其实不然,软件团队有各种形式,适用于不同的人员和需求.适合自己的团队才能共赢! ...
- (Alpha)Let's-典型用户和场景&功能规格说明书
典型用户和场景 Personal/典型用户 名字 阿王 性别.年龄 男.20 职业 学生 收入 无 知识层次和能力 大学学生,善于乐于使用电脑.手机 生活/工作情况 上学 动机.目的.困难 感到大学生 ...
- asp.net简述MVC开发模式
详情请参考:http://www.runoob.com/aspnet/mvc-intro.html 1.MVC 是三种 ASP.NET 编程模式中的一种.MVC 是一种使用 MVC(Model Vie ...
- Linux命令常用
数据库:查看日志 vim /var/log/mysqld.log
- final发布简评
1.nice!——约跑app:本次发布使用摄像头展示,比之前清晰的多,展示效果很好,值得学习!功能都已实现,已经可以使用,好评. 2.飞天小女警——礼物挑选:本次发布风格与上次不同,除此之外添加了猜你 ...
- spring 事务传播 never 当一个业务方法设置为never时候表示 不会加入任何事务中
- ANSI C 常见宏的使用
1. __VA_ARGS__: ... 表示可变参数列表,__VA_ARGS__在预处理中会被可变参数列表替代 2. __FILE__:正在编译文件的文件路径 3. __LINE__:正在编译文件的 ...
- 题解 P5239 【回忆京都】
你们这些写题解的,就不能把话说清楚嘛!(吐槽1) 你们这些出题的,就不能多出点东方嘛!(吐槽2) 你们这些做题的,就不来写一篇详细一点的题解嘛!(吐槽3) 以上均是个人吐槽,纯属吐槽,不带任何针对性和 ...
- Warm up HDU - 4612( 树的直径 边双连通分量)
求在图中新建一条边后 剩下的最少的桥的数量..先tarjan求桥的数量..然后缩点..以连通分量为点建图 bfs求直径 最后用桥的数量减去直径即为答案 bfs求直径 https://www.cnb ...
- Antenna Placement POJ - 3020 (最小边集覆盖)
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10699 Accepted: 526 ...