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