it-swarm.com.de

.NET-Virenscan-API

Ich baue eine Webanwendung, in der ich die vom Benutzer hochgeladenen Dateien auf Viren überprüfen muss.

Kann jemand, der Erfahrung mit dem Aufbau eines solchen Objekts hat, Informationen darüber erhalten, wie Sie dies einrichten können? Ich vermute, Antiviren-Softwarepakete verfügen über APIs, um programmgesteuert auf ihre Funktionalität zuzugreifen, aber es scheint nicht einfach zu sein, die Details zu verstehen.

Zu Ihrer Information ist die Anwendung in C # geschrieben.

35
Farinha

Ich würde wahrscheinlich nur einen Systemaufruf ausführen, um einen unabhängigen Prozess auszuführen, um den Scan durchzuführen. Es gibt eine Reihe von Befehlszeilen-AV-Engines verschiedener Anbieter. 

8
Joe

Wichtiger Hinweis vor der Verwendung: Beachten Sie die TOS-Vereinbarung. Sie geben ihnen vollen Zugriff auf alles: "Wenn Sie Inhalte hochladen oder auf andere Weise einreichen, geben Sie VirusTotal (und denjenigen, mit denen wir zusammenarbeiten) eine weltweite, gebührenfreie, unwiderrufliche und übertragbare Lizenz zur Verwendung, Bearbeitung, zum Hosting, Speichern, Reproduzieren, Ändern und Erstellung abgeleiteter Werke, Kommunikation, Veröffentlichung, öffentliche Aufführung, öffentliche Anzeige und Verbreitung solcher Inhalte. " 

Anstatt ein lokales Antivirus-Programm zu verwenden (und damit Ihr Programm an dieses bestimmte Antivirus-Produkt zu binden und Ihre Kunden zur Installation dieses Antivirus-Produkts aufzufordern), können Sie die Dienste von VirusTotal.com verwenden.

Diese Site bietet einen kostenlosen Service, in dem Ihre Datei als Eingabe für zahlreiche Antivirenprodukte bereitgestellt wird und Sie einen detaillierten Bericht mit den Nachweisen des Scanvorgangs erhalten. Auf diese Weise ist Ihre Lösung nicht mehr an ein bestimmtes Antivirus-Produkt gebunden (obwohl Sie an die Verfügbarkeit des Internets gebunden sind).

Die Site bietet auch eine Anwendungsprogrammierschnittstelle, die einen programmgesteuerten Ansatz für das Scanmodul ermöglicht. 

Hier eine VirusTotal.NET-Bibliothek für diese API
Hier die ausführliche Dokumentation über ihre API
Hier die Dokumentation mit Beispielen in Python ihrer Schnittstelle

Und da keine Antwort ohne Code vollständig ist, wird dies direkt vom Beispiel-Client der VirusTotal.NET-Bibliothek übernommen 

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 ....

}

HAFTUNGSAUSSCHLUSS
Ich bin in keiner Weise mit ihnen beschäftigt. Ich schreibe diese Antwort, nur weil es ein gutes Update für diese 4 Jahre alten Antworten zu sein scheint.

14
Steve

Sie können die IAttachmentExecute-API verwenden. 

Windows stellt die übliche API zum Aufrufen der installierten Antivirus-Software bereit (natürlich unterstützt die erforderliche Antiviren-Software die API). Die API zum Aufrufen der Antiviren-Software bietet jedoch nur den Stil der COM-Schnittstelle. IDispatch wird nicht unterstützt. Daher ist der Aufruf dieser API in jeder .NET-Sprache und Skriptsprache zu schwierig.

Laden Sie diese Bibliothek hier herunter Anti Virus Scanner für .NET oder fügen Sie einen Verweis auf Ihr VS-Projekt von "NuGet" AntiVirusScanner hinzu.

Zum Beispiel scannen Sie untenstehenden Code eine Datei:

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

Schauen Sie sich die Microsoft Antivirus API an. Es verwendet COM, das sich leicht mit .NET verbinden lässt. Es bezieht sich speziell auf Internet Explorer und Microsoft Office, aber ich verstehe nicht, warum Sie keine Dateien zum Scannen nach Bedarf verwenden können.

Alle modernen Scanner, die unter Windows laufen, sollten diese API verstehen.

7
Thorarin

Verschiedene Virenscanner haben APIs. Eine, mit der ich integriert habe, ist Sophos. Ich bin ziemlich sicher, dass Norton auch eine API hat, während dies bei McAfee nicht der Fall ist (früher). Welche Virensoftware möchten Sie verwenden? Vielleicht möchten Sie Metascan auschecken, da dies die Integration mit vielen verschiedenen Scannern ermöglicht, es fallen jedoch jährliche Lizenzkosten an. :-P

4
Craig

Schamloser Plug, aber Sie möchten vielleicht mal nachsehen https://scanii.com , es handelt sich im Wesentlichen um Malware/Virenerkennung als (REST) ​​-Dienst. Vergewissern Sie sich auch, dass Sie die API-Begriffe von virustotal gelesen und verstanden haben ( https://www.virustotal.com/de/documentation/public-api/ ). 

1
Rafael Ferreira
//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(); 
1
Priya Premkumar

Ich hatte auch diese Anforderung. Ich habe clamAv Anti-Virus verwendet, der On-Demand-Scanning durch Senden der Datei an den TCP-Überwachungsport ermöglicht. Sie können das Paket nClam nuget verwenden, um Dateien an clamav zu senden. 

        var clam = new ClamClient("localhost", 3310);
        var scanResult = clam.ScanFileOnServerAsync("C:\\test.txt"); //any file you would like!
        switch (scanResult.Result.Result)
        {
            case ClamScanResults.Clean:
                Console.WriteLine("The file is clean!");
                break;
            case ClamScanResults.VirusDetected:
                Console.WriteLine("Virus Found!");
                Console.WriteLine("Virus name: {0}", scanResult.Result.InfectedFiles[0].FileName);
                break;
            case ClamScanResults.Error:
                Console.WriteLine("Woah an error occured! Error: {0}", scanResult.Result.RawResult);
                break;
        }

Ein einfaches und detailliertes Beispiel wird gezeigt hier . Hinweis: - Die Methode des synchronen Scans ist im neuesten Nuget nicht verfügbar. Sie müssen wie oben beschrieben codieren

Zum Testen eines Virus können Sie die folgende Zeichenfolge in einer txt-Datei verwenden 

X5O! P% @ AP [4\PZX54 (P ^) 7CC) 7} $ EICAR-STANDARD-ANTIVIRUS-TEST-DATEI! $ H + H *

0
Nithin Chandran