Подтвердить что ты не робот

API проверки подлинности .NET

Я создаю веб-приложение, в котором мне нужно сканировать загруженные пользователем файлы для вирусов.

Может ли кто-нибудь, кто имеет опыт создания чего-то подобного, может предоставить информацию о том, как его запустить и запустить? Я предполагаю, что пакеты антивирусного программного обеспечения имеют API-интерфейсы для доступа к их функциям программно, но, похоже, нелегко получить информацию о деталях.

FYI, приложение написано на С#.

4b9b3361

Ответ 1

Я, вероятно, просто сделаю системный вызов для запуска независимого процесса для сканирования. Существует несколько версий AV-систем командной строки от разных поставщиков.

Ответ 2

Вместо использования локальной антивирусной программы (и, таким образом, привязывая вашу программу к этому конкретному продукту Antivirus и запрашивая у ваших клиентов установку этого продукта Antivirus) вы можете воспользоваться услугами VirusTotal.com

Этот сайт предоставляет бесплатный сервис, в котором ваш файл предоставляется в качестве входных данных для многочисленных антивирусных продуктов, и вы получаете подробный отчет с доказательствами, полученными в результате процесса сканирования. Таким образом, ваше решение больше не привязано к определенному антивирусному продукту (хотя вы привязаны к доступности Интернета)

Сайт также предоставляет интерфейс прикладного программирования, который позволяет программным образом подходить к его механизму сканирования.

Здесь VirusTotal.NET - библиотека для этого API
Здесь содержится исчерпывающая документация об их API
Вот документация с примерами в Python их интерфейса

И поскольку никакой ответ не завершен без кода, это берется непосредственно из образца клиента, поставляемого с библиотекой VirusTotal.NET

static void Main(string[] args)
{
    VirusTotal virusTotal = new VirusTotal(ConfigurationManager.AppSettings["ApiKey"]);

    //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 = 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 = virusTotal.ScanFile(fileInfo);
        PrintScan(fileResult);
    }
    ... continue with testing a web site ....

}

ОТКАЗ
Я никоим образом не связан с ними. Я пишу этот ответ только потому, что он кажется хорошим обновлением для этих 4-летних ответов.

Ответ 3

Вы можете использовать API IAttachmentExecute.

ОС Windows предоставляет общий API для вызова установленного антивирусного программного обеспечения (конечно, антивирусное программное обеспечение требует поддержки API). Но API для вызова антивирусного программного обеспечения обеспечивает только интерфейс COM-интерфейса, а не поддержку IDispatch. Таким образом, вызов этого API слишком сложный с любого языка .NET и языка script.

Скачайте эту библиотеку отсюда Антивирусный сканер для .NET или добавьте ссылку на свой проект VS из "NuGet" AntiVirusScanner

Например, следующий код сканирует файл:

var scanner = new AntiVirus.Scanner();
var result = scanner.ScanAndClean(@"c:\some\file\path.txt");
Console.WriteLine(result); // console output is "VirusNotFound".

Ответ 4

Взгляните на Microsoft Antivirus API. Он использует COM, который должен быть достаточно простым, чтобы взаимодействовать с .NET. Это относится конкретно к Internet Explorer и Microsoft Office, но я не понимаю, почему вы не сможете использовать для проверки по запросу любой файл.

Все современные сканеры, работающие в Windows, должны понимать этот API.

Ответ 5

У разных сканеров вирусов есть API. Один из них, который я объединил, - Sophos. Я уверен, что у Norton есть API, в то время как McAfee этого не делает. Какое программное обеспечение для вирусов вы хотите использовать? Вы можете проверить Metascan, так как это позволит интегрироваться со многими различными сканерами, но есть годовая стоимость лицензии.:-P

Ответ 6

Бесстыдный плагин, но вы можете проверить https://scanii.com, это в основном обнаружение вредоносных программ/вирусов как служба REST. О, также убедитесь, что вы читаете и понимаете термины API-интерфейсов virustotal (https://www.virustotal.com/en/documentation/public-api/) - они очень понятны о том, чтобы не разрешать коммерческое использование.

Ответ 7

Из моего опыта вы можете использовать COM для взаимодействия с некоторым антивирусным программным обеспечением. Но то, что я хотел бы предложить, немного проще, просто проанализируйте результаты сканирования после сканирования. Все, что вам нужно сделать, это запустить процесс сканирования и указать его в файл/папку, которую вы хотите сканировать, сохранить результаты сканирования в файл или перенаправить stdout в приложение и проанализировать результаты.

Ответ 8

//Scan  
string start = Console.ReadLine();  
System.Diagnostics.Process scanprocess = new System.Diagnostics.Process();  
sp.StartInfo.WorkingDirectory = @"<location of your antivirus>";  
sp.StartInfo.UseShellExecute = false;  
sp.StartInfo.FileName = "cmd.exe";  
sp.StartInfo.Arguments = @"/c antivirusscanx.exe /scan="+filePath;  
sp.StartInfo.CreateNoWindow = true;  
sp.StartInfo.RedirectStandardInput = true;    
sp.StartInfo.RedirectStandardError = true; sp.Start();  
string output = sp.StandardOutput.ReadToEnd();  
//Scan results  
System.Diagnostics.Process pr = new System.Diagnostics.Process();      
pr.StartInfo.FileName = "cmd.exe";  
pr.StartInfo.Arguments = @"/c echo %ERRORLEVEL%";   
pr.StartInfo.RedirectStandardInput = true;    
pr.StartInfo.RedirectStandardError = true; pr.Start();  
output = processresult.StandardOutput.ReadToEnd();  
pr.Close();