日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在.NetCore中使用Myrmec检测文件真实格式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Myrmec 是什么?

Myrmec 是一個用于檢測文件格式的庫,Myrmec不同于其它庫或者手寫檢測代碼,Myrmec不依賴文件擴展名(在實際使用中,你的用戶很可能使用虛假的擴展名欺騙你的應(yīng)用程序),Myrmec會檢測文件的二進(jìn)制頭,并在其元數(shù)據(jù)庫中匹配來獲得文件的格式。

例如Jpg圖片的二進(jìn)制頭是 "FF D8 FF DB" 那么Myrmec會匹配到這個文件頭,并獲得兩個結(jié)果--"jpg"和"jpeg"。

如何使用

首先安裝 nuget 包

?Install-Package Myrmec

或者通過 DotnetCli

?dotnet add package Myrmec?

編寫匹配代碼

// 創(chuàng)建嗅探器

Sniffer sniffer = new Sniffer();


// 使用元數(shù)據(jù)填充嗅探器

sniffer.Populate(FileTypes.CommonFileTypes);


// 獲取要匹配文件的文件頭,一般20個字節(jié)就夠了,有的格式可能需要更長

byte[] fileHead = ReadFileHead();


// 匹配并獲取結(jié)果

List<string> results = sniffer.Match(fileHead)

為什么結(jié)果是List<String>?

許多時候一個文件格式會對應(yīng)多個擴展名,比如jpg。還有的時候多種文件格式都是一種文件格式,比如 zip、apk、pptx 它們都是zip achive ,所以當(dāng)你匹配了一個zip文件,那么你最少會獲得3個擴展名。當(dāng)結(jié)果是空時,說明沒有匹配到結(jié)果。

?

查詢多個結(jié)果或者一個

會有這樣的情況:文件格式A 的文件頭是 "ff,11,22" ,文件格式B 的 文件頭是“ff,11,22,33”,這時候你要匹配的文件頭是"ff,11,22,33,44",那么它最多會匹配到這兩個結(jié)果,并返回他們包含的所有擴展名

// 這會在匹配到第一個結(jié)果時就返回

// default is false

List<string> results = sniffer.Match(fileHead,false);


// 這會匹配到所有的結(jié)果

List<string> results = sniffer.Match(fileHead,true);

添加自定義的文件頭

也許你創(chuàng)建了一種文件格式,或者你所使用的文件格式不在元數(shù)據(jù)中,這時你可以使用下面的代碼將其加入元數(shù)據(jù):

var data = new byte[]

{

? ? 0x11,

? ? 0x22,

? ? 0x33

};

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 的擴展方法。

?

元數(shù)據(jù)來源

元數(shù)據(jù)來自維基百科 List of file signatures.

RoadMap

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

?ff,11,ff?起始偏移10字節(jié)

以及 ?11,ff,??,??,??,11,??,fd?這種含有跳躍的文件格式。

不過事實上他們兩個是一種形式,預(yù)計下一個版本就會發(fā)布對其的支持。

支持 .net standard.現(xiàn)在是.net core 2,在未來會調(diào)整到.net standard

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

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

歡迎大家試用,提出意見與建議

?

為什么github倉庫是英文的?

作為一個中文開發(fā)者,我沒有在github倉庫中使用中文,因為我希望能夠長久的開發(fā)這個項目,并希望世界各地的開發(fā)者都能使用這個庫,或者參與開發(fā),為了此目的,我在github上使用的是英文。


原文地址:?https://www.cnblogs.com/rocketRobin/p/8446273.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的在.NetCore中使用Myrmec检测文件真实格式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。