资讯

在.NetCore中使用Myrmec检测文件真实格式

更新时间:2018-11-13 09:40:41 来源:公务员薪酬改革别只是涨工资

[已有58282人评论] [有偿投稿]

“呜呜”的空袭警报声突然响起来,韩非脸色大变,急忙对身边的陈婉儿喊道:“快躲进防空洞里面去,鬼子飞机过来了!”

如何创造信息差赚钱

完成始皇帝当年在帝国最强盛明明能做到却没能完成的事情,成就史上最强,超越始皇帝建立的帝国。”
半个时辰后,李庆安便赶到了兴庆宫,教贵妃投箭可不是后世老师夹本书就进教室那么简单,先要沐浴更衣,用完午饭,再换上宫中准备的侍卫服,他自己的东西则一样不准带入,由专人保管,离开时返还。

“他真的成为了传说中的超级赛亚人!”贝吉塔无法接受这个事实,能成为超级赛亚人的只有他这个赛亚人王子,而不是这个不知道从哪里冒出来的赛亚人。

在.NetCore中使用Myrmec检测文件真实格式


Myrmec 是什么?

Myrmec 是一个用于检测文件格式的库,Myrmec不同于其它库或者手写检测代码,Myrmec不依赖文件扩展名(在实际使用中,你的用户很可能使用虚假的扩展名欺骗你的应用程序),Myrmec会检测文件的二进制头,并在其元数据库中匹配来获得文件的格式。

例如Jpg图片的二进制头是 "FF D8 FF DB" 那么Myrmec会匹配到这个文件头,并获得两个结果--"jpg"和"jpeg"。

如何使用

首先安装 nuget 包

 Install-Package Myrmec

或者通过 DotnetCli

 dotnet add package Myrmec 

编写匹配代码

 1 // 创建嗅探器
 2 Sniffer sniffer = new Sniffer();
 3 
 4 // 使用元数据填充嗅探器
 5 sniffer.Populate(FileTypes.CommonFileTypes);
 6 
 7 // 获取要匹配文件的文件头,一般20个字节就够了,有的格式可能需要更长
 8 byte[] fileHead = ReadFileHead();
 9 
10 // 匹配并获取结果
11 List<string> results = sniffer.Match(fileHead)

为什么结果是List<String>?

许多时候一个文件格式会对应多个扩展名,比如jpg。还有的时候多种文件格式都是一种文件格式,比如 zip、apk、pptx 它们都是zip achive ,所以当你匹配了一个zip文件,那么你最少会获得3个扩展名。当结果是空时,说明没有匹配到结果。

 

查询多个结果或者一个

会有这样的情况:文件格式A 的文件头是 "ff,11,22" ,文件格式B 的 文件头是“ff,11,22,33”,这时候你要匹配的文件头是"ff,11,22,33,44",那么它最多会匹配到这两个结果,并返回他们包含的所有扩展名

1 // 这会在匹配到第一个结果时就返回
2 // default is false
3 List<string> results = sniffer.Match(fileHead,false);
4 
5 // 这会匹配到所有的结果
6 List<string> results = sniffer.Match(fileHead,true);

添加自定义的文件头

也许你创建了一种文件格式,或者你所使用的文件格式不在元数据中,这时你可以使用下面的代码将其加入元数据:

1 var data = new byte[]
2 {
3     0x11,
4     0x22,
5     0x33
6 };
7 sniffer.Add(data, new[] { "what", "file", "type" });

注意这个新添加的格式拥有3个扩展名。

获取MimeType

1 List<string> result = sniffer.Match(head);
2 string mimeType = MimeTypes.GetMimeType(result.First());

 

或者

1 string mimeType = MimeTypes.GetMimeType("png");

 

在下一个版本中,获取MimeType将会被替换成string 的扩展方法。

 

元数据来源

元数据来自维基百科 List of file signatures.

RoadMap

接下来要做的事就是支持 带有偏移量的 文件格式,例如

 ff,11,ff 起始偏移10字节

以及  11,ff,??,??,??,11,??,fd 这种含有跳跃的文件格式。

不过事实上他们两个是一种形式,预计下一个版本就会发布对其的支持。

支持 .net standard.现在是.net core 2,在未来会调整到.net standard

github地址:https://github.com/rocketRobin/myrmec

nuget地址:https://www.nuget.org/packages/Myrmec/

欢迎大家试用,提出意见与建议

 

为什么github仓库是英文的?

作为一个中文开发者,我没有在github仓库中使用中文,因为我希望能够长久的开发这个项目,并希望世界各地的开发者都能使用这个库,或者参与开发,为了此目的,我在github上使用的是英文。

当前文章:http://www.hxzjbank.com/igr5o/

发布时间:2018-11-13 06:08:28

摇钱树 如何创业赚钱 有台电脑如何赚钱 网络水军赚钱吗 养动物赚钱游戏 网上挣钱软件排名 qq群可以做什么项目 如何快速挣钱不用投资

编辑:海马龙

看完这篇文章有何感觉?

  • 0人
      雷囧
  • 0人
      恶心
  • 0人
      期待
  • 1人
      难过
  • 0人
      超赞
  • 0人
      路过
  •  
    0
 

一周热点资讯

韩庚回应人气下滑:那都是表面的东西陈浩民电影杀青 急返香港顾妻小 停顿了一刹那,广场上顿时响起了一片欢呼声,官员们拥抱在起来,齐声欢呼,这个欢呼胜利的情形使裴?F的眼泪都流出来了,这个捷报来得太及时了,它像一盏明灯,照亮了所有人的心,给众人带来了希望,他们心中的焦虑和担忧,在此时都一扫而空。[详细]
最新福利内涵动态GIF图 在学校就差没干过老师范冰冰的商业版图:从代言产品到投资公司 偏偏对方还和刘皓感情深厚,比自己这个摆明要算计刘皓的人优势多很多,所以蒂可也感觉到危机,要达到目的话她的对手可不止一个,还有刘皓的女人,必须要比她们更加出色,更加能让刘皓垂涎自己,更加能吸引刘皓才行。[详细]

八卦周边

《青岛往事》央视热播 于杪鑫黄渤斗智斗勇《大好时光》大结局 胡歌示范国民好男友 “哎。”唐牛答应一声,千年人参就藏在飞天燕子屋内,唐牛只是见过李秀儿拿着盒子进去,并不清楚藏在什么地方。[详细]
第72届威尼斯电影节评委:琳恩-拉姆塞《怦然星动》曝推广曲MV 陈洁仪献唱《心动》 当然,这些禁制对无形无质的天魔是毫无用处的,而在整个禀气成真的过程中,最需要担心的不是外人的侵入,而是天魔的干扰。[详细]
游迅简介 | 商务合作 | 广告服务 | 人才招聘 | 法律声明 | 内容导航 | 合作伙伴 | 游戏帮助 | 问题反馈

CopyRight?2004年-20162016201620162016年 迅网 All Rights Reserved
备案编号:沪ICP备12047477号-6