.NetCoreでMyrmecを使用してファイルの実際のフォーマットを検出
5291 ワード
Myrmecって何?
Myrmecはファイルフォーマットを検出するためのライブラリであり、Myrmecは他のライブラリや手書き検出コードとは異なり、Myrmecはファイル拡張子に依存せず(実際の使用では、ユーザーが虚偽の拡張子を使ってアプリケーションを騙す可能性が高い)、Myrmecはファイルのバイナリヘッダを検出し、そのメタデータベースで一致してファイルのフォーマットを取得します.
例えばJpgピクチャのバイナリヘッダが「FFD 8 FFDB」である場合、Myrmecはこのファイルヘッダに一致し、「jpg」と「jpeg」の2つの結果を得る.
使用方法
まずnugetパッケージをインストールします
Install-Package Myrmec
またはDotnetCliで
dotnet add package Myrmec
照合コードの作成
どうして結果がListなの?
多くの場合、1つのファイルフォーマットはjpgなどの複数の拡張子に対応します.また、zip、apk、pptxなど、多くのファイルフォーマットがzip achiveなので、zipファイルに一致すると、少なくとも3つの拡張子が得られます.結果が空の場合、結果は一致しません.
複数の結果または1つのクエリ
ファイル形式Aのファイルヘッダが「ff,11,22」であり、ファイル形式Bのファイルヘッダが「ff,11,22,33」である場合、一致するファイルヘッダが「ff,11,22,33,44」である場合、最大2つの結果に一致し、それらに含まれる拡張子を返す
カスタムヘッダーの追加
ファイル形式を作成したか、使用しているファイル形式がメタデータに含まれていない場合は、次のコードを使用してメタデータに追加できます.
この新しく追加されたフォーマットには、3つの拡張子があります.
MimeTypeの取得
または
次のバージョンでは、MimeTypeを取得するとstringの拡張メソッドに置き換えられます.
メタデータソース
メタデータはウィキペディアのリストから
RoadMap
次に行うべきことは、オフセット量のあるファイルフォーマットをサポートすることです.たとえば、
ff,11,ff開始オフセット10バイト
および 11,ff,??,??,??,11,??,fdというジャンプを含むファイルフォーマット.
しかし、実際には2つは1つの形式であり、次のバージョンでサポートが発表される予定です.
サポート.net standard.現在は.net core 2で、将来.net standardに調整されます
githubアドレス:https://github.com/rocketRobin/myrmec
nugetアドレス:https://www.nuget.org/packages/Myrmec/
皆さんの試用を歓迎して、意見と提案を出します
なぜgithub倉庫は英語ですか?
中国語の開発者としてgithub倉庫で中国語を使っていません.このプロジェクトを長く開発し、世界各地の開発者がこのライブラリを使ったり、開発に参加したりすることを望んでいます.そのため、githubでは英語を使っています.
Myrmecはファイルフォーマットを検出するためのライブラリであり、Myrmecは他のライブラリや手書き検出コードとは異なり、Myrmecはファイル拡張子に依存せず(実際の使用では、ユーザーが虚偽の拡張子を使ってアプリケーションを騙す可能性が高い)、Myrmecはファイルのバイナリヘッダを検出し、そのメタデータベースで一致してファイルのフォーマットを取得します.
例えばJpgピクチャのバイナリヘッダが「FFD 8 FFDB」である場合、Myrmecはこのファイルヘッダに一致し、「jpg」と「jpeg」の2つの結果を得る.
使用方法
まず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なの?
多くの場合、1つのファイルフォーマットはjpgなどの複数の拡張子に対応します.また、zip、apk、pptxなど、多くのファイルフォーマットがzip achiveなので、zipファイルに一致すると、少なくとも3つの拡張子が得られます.結果が空の場合、結果は一致しません.
複数の結果または1つのクエリ
ファイル形式Aのファイルヘッダが「ff,11,22」であり、ファイル形式Bのファイルヘッダが「ff,11,22,33」である場合、一致するファイルヘッダが「ff,11,22,33,44」である場合、最大2つの結果に一致し、それらに含まれる拡張子を返す
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の拡張メソッドに置き換えられます.
メタデータソース
メタデータはウィキペディアのリストから
RoadMap
次に行うべきことは、オフセット量のあるファイルフォーマットをサポートすることです.たとえば、
ff,11,ff開始オフセット10バイト
および 11,ff,??,??,??,11,??,fdというジャンプを含むファイルフォーマット.
しかし、実際には2つは1つの形式であり、次のバージョンでサポートが発表される予定です.
サポート.net standard.現在は.net core 2で、将来.net standardに調整されます
githubアドレス:https://github.com/rocketRobin/myrmec
nugetアドレス:https://www.nuget.org/packages/Myrmec/
皆さんの試用を歓迎して、意見と提案を出します
なぜgithub倉庫は英語ですか?
中国語の開発者としてgithub倉庫で中国語を使っていません.このプロジェクトを長く開発し、世界各地の開発者がこのライブラリを使ったり、開発に参加したりすることを望んでいます.そのため、githubでは英語を使っています.