2017-08-30 7 views
-3

私はファイルのmd5ハッシュをチェックし、virustotal.comの検索を使ってファイルが既にスキャンされているかどうか(ハッシュマッチ)をチェックする追加のセキュリティを構築しようとしています。検出された。問題は、そのページには判読不能なHTMLコードがあることです。私は、Html Agility Packがこの仕事をすることができると聞きました。ウェブからの情報入手が

HtmlWeb web = new HtmlWeb(); 
HtmlDocument document = web.Load("https://virustotal.com/#/file/" + md5hash "/detection"); 

しかし、Html Agility Pack I sawの例はすべてHTMLコードです。どのように私はそれを行うことができますか?

+1

デバッグの助けを求める*ご質問、それを使用する方法のライブラリーのGitHubのページからの例である(「なぜこのコードは動作しないの?」)は、所望の動作が含まれている必要があり、特定の問題またはエラーとその問題自体でそれを再現するために必要な最短コード* –

答えて

1

VirusTotalのHTMLを解析する必要はありません。これらのAPIエンドポイントは、コンピュータで動作するように設計されています。ドキュメントはhttps://developers.virustotal.com/v2.0/reference

で見つけることができます.NuGetパッケージVirusTotal.NETですべてをラップする既存のライブラリを使用することもできるので、クラスを呼び出すことができます。ここで

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Threading.Tasks; 
using VirusTotalNET.Objects; 
using VirusTotalNET.ResponseCodes; 
using VirusTotalNET.Results; 

namespace VirusTotalNET.Client 
{ 
    class Program 
    { 
     private const string ScanUrl = "http://www.google.com/"; 

     static void Main(string[] args) 
     { 
      RunExample().Wait(); 

      Console.WriteLine("Press a key to continue"); 
      Console.ReadLine(); 
     } 

     private static async Task RunExample() 
     { 
      VirusTotal virusTotal = new VirusTotal("YOUR API KEY HERE"); 

      //Use HTTPS instead of HTTP 
      virusTotal.UseTLS = true; 

      //Create the EICAR test virus. See http://www.eicar.org/86-0-Intended-use.html 
      FileInfo fileInfo = new FileInfo("EICAR.txt"); 
      File.WriteAllText(fileInfo.FullName, @"X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); 

      //Check if the file has been scanned before. 
      FileReport fileReport = await virusTotal.GetFileReport(fileInfo); 

      bool hasFileBeenScannedBefore = fileReport.ResponseCode == ReportResponseCode.Present; 

      Console.WriteLine("File has been scanned before: " + (hasFileBeenScannedBefore ? "Yes" : "No")); 

      //If the file has been scanned before, the results are embedded inside the report. 
      if (hasFileBeenScannedBefore) 
      { 
       PrintScan(fileReport); 
      } 
      else 
      { 
       ScanResult fileResult = await virusTotal.ScanFile(fileInfo); 
       PrintScan(fileResult); 
      } 

      Console.WriteLine(); 

      UrlReport urlReport = await virusTotal.GetUrlReport(ScanUrl); 

      bool hasUrlBeenScannedBefore = urlReport.ResponseCode == ReportResponseCode.Present; 
      Console.WriteLine("URL has been scanned before: " + (hasUrlBeenScannedBefore ? "Yes" : "No")); 

      //If the url has been scanned before, the results are embedded inside the report. 
      if (hasUrlBeenScannedBefore) 
      { 
       PrintScan(urlReport); 
      } 
      else 
      { 
       UrlScanResult urlResult = await virusTotal.ScanUrl(ScanUrl); 
       PrintScan(urlResult); 
      } 
     } 

     private static void PrintScan(UrlScanResult scanResult) 
     { 
      Console.WriteLine("Scan ID: " + scanResult.ScanId); 
      Console.WriteLine("Message: " + scanResult.VerboseMsg); 
      Console.WriteLine(); 
     } 

     private static void PrintScan(ScanResult scanResult) 
     { 
      Console.WriteLine("Scan ID: " + scanResult.ScanId); 
      Console.WriteLine("Message: " + scanResult.VerboseMsg); 
      Console.WriteLine(); 
     } 

     private static void PrintScan(FileReport fileReport) 
     { 
      Console.WriteLine("Scan ID: " + fileReport.ScanId); 
      Console.WriteLine("Message: " + fileReport.VerboseMsg); 

      if (fileReport.ResponseCode == ReportResponseCode.Present) 
      { 
       foreach (KeyValuePair<string, ScanEngine> scan in fileReport.Scans) 
       { 
        Console.WriteLine("{0,-25} Detected: {1}", scan.Key, scan.Value.Detected); 
       } 
      } 

      Console.WriteLine(); 
     } 

     private static void PrintScan(UrlReport urlReport) 
     { 
      Console.WriteLine("Scan ID: " + urlReport.ScanId); 
      Console.WriteLine("Message: " + urlReport.VerboseMsg); 

      if (urlReport.ResponseCode == ReportResponseCode.Present) 
      { 
       foreach (KeyValuePair<string, ScanEngine> scan in urlReport.Scans) 
       { 
        Console.WriteLine("{0,-25} Detected: {1}", scan.Key, scan.Value.Detected); 
       } 
      } 

      Console.WriteLine(); 
     } 
    } 
} 
+0

ハッシュの配列が1分当たりのチェックに制限があるため、高速にチェックすることはできません。別の方法があるはずです – Nox

+0

あなたがより速い応答を必要とするなら、あなたはプレミアムAPIを得ることができます。 –

関連する問題