2009-06-10 5 views
32

Ich baue eine Webanwendung, in der ich die vom Benutzer hochgeladenen Dateien auf Viren scannen muss..NET Virus Scanning API

Kann jemand mit Erfahrung im Aufbau von so etwas Informationen darüber zur Verfügung stellen, wie man das in Gang bringt? Ich nehme an, Antivirus-Software-Pakete haben APIs, um programmatisch auf ihre Funktionalität zuzugreifen, aber es scheint, dass es nicht einfach ist, sich an den Details zu orientieren.

FYI, die Anwendung ist in C# geschrieben.

+0

Überprüfen Sie diese [Frage] (http://stackoverflow.com/questions/194013/anti-virus-integration-with-net-application). Es sollte etwas helfen. – Shoban

Antwort

7

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

+2

http://www.clamwin.com/ und http://www.clamav.net/lang/en/ sind ein guter Anfang. – cofiem

+2

Die Dinge haben sich in den 6 Jahren geändert, seit ich diese – Joe

0

Aus meiner Erfahrung können Sie COM für die Schnittstelle mit einigen Anti-Virus-Software verwenden. Aber was ich vorschlagen würde ist ein bisschen einfacher, nur scannen Ergebnisse nach dem Scannen. Alles, was Sie tun müssen, ist, den Scannerprozess zu starten und auf die zu scannende Datei/den Ordner zu richten, die Scanergebnisse in einer Datei zu speichern oder die Standardausgabe an Ihre Anwendung umzuleiten und die Ergebnisse zu parsen.

4

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

7

Werfen Sie einen Blick auf die Microsoft Antivirus API. Es verwendet COM, die leicht genug sein sollte, um mit .NET zu verbinden. Es bezieht sich speziell auf Internet Explorer und Microsoft Office, aber ich sehe nicht, warum Sie nicht in der Lage sein würden, jede Datei auf Anforderung zu scannen.

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

+0

geschrieben habe. Ich glaube, dass API für C++ nicht .net ist. – htm11h

+4

Es verwendet COM. Was bedeutet, dass Sie es von .NET verwenden können. – Thorarin

11

Wichtiger Hinweis vor der Verwendung: Beachten Sie die TOS-Vereinbarung. Sie geben ihnen den vollen Zugriff auf alles: "Wenn Sie Inhalte hochladen oder anderweitig übermitteln, geben Sie VirusTotal (und denen, mit denen wir arbeiten) eine weltweite, gebührenfreie, unwiderrufliche und übertragbare Lizenz zum Verwenden, Bearbeiten, Hosten, Speichern, Reproduzieren, Modifizieren, Erschaffen Sie abgeleitete Werke, kommunizieren Sie, veröffentlichen Sie sie, geben Sie sie öffentlich vor, zeigen Sie sie öffentlich an und verteilen Sie solche Inhalte. "

Statt ein lokales Antivirus-Programm zu verwenden (und damit verbindlich Ihr Programm zu diesem bestimmten Produkt Anti-Virus und Ihre Kunden Ihr Interesse zu installieren, dass Antivirus-Produkt) Sie die Dienste von VirusTotal.com

Diese Seite verwenden könnte bietet einen kostenlosen Service in Diese Datei wird als Eingabe für zahlreiche Antivirus-Produkte verwendet und Sie erhalten einen detaillierten Bericht mit den Nachweisen, die sich aus dem Scanvorgang ergeben. Auf diese Weise ist Ihre Lösung nicht mehr an ein bestimmtes Antivirus-Produkt gebunden (obwohl Sie an die Internetverfügbarkeit gebunden sind).

Die Website bietet auch eine Anwendungsprogrammierschnittstelle, die eine programmatische Annäherung an seine Scan-Engine ermöglicht.

Here a VirusTotal.NET a library for this API
Here the comprensive documentation about their API
Here the documentation with examples in Python of their interface

Und weil keine Antwort ohne Code abgeschlossen ist, wird dies mit dem Virustotal verschifft direkt aus der Probe Client genommen.NET-Bibliothek

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 beteiligt. Ich schreibe diese Antwort, nur weil es scheint, ein gutes Update für diese 4 Jahre alten Antworten zu sein.

+0

Das sieht wie die echte Antwort aus. –

+4

Beachten Sie, dass VirusTotal-Lösung nicht kommerziell ist. Sie erlauben nicht, dass die APIs in kommerziellen Anwendungen verwendet werden. – Illuminati

+0

Ich würde auch ihre Datenschutzerklärung überprüfen .... – Gumzle

0
//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

Können Sie hier eine detaillierte Erklärung schreiben? Wo finde ich antivirusscanx.exe zum Beispiel? –

8

Sie können die IAttachmentExecute-API verwenden.

Windows OS bieten die allgemeine API zum Aufruf der Anti-Virus-Software, die installiert ist (Natürlich unterstützt die Anti-Virus-Software benötigt die API). Aber die API zum Aufrufen der Anti-Virus-Software bieten nur COM-Schnittstelle Stil, nicht unterstützt IDispatch. Daher ist das Aufrufen dieser API zu schwierig von einer beliebigen .NET-Sprache und Skriptsprache.

Download dieser Bibliothek von hier Anti Virus Scanner for .NET oder Referenz Ihre VS-Projekt von "NuGet" AntiVirusScanner

Zum Beispiel fügen Sie unten Code scannen eine Datei:

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

Danke!Die Sache, die diese Lösung besser als die anderen macht, ist, dass sie vollständig generisch ist, so dass sie eine einzige Schnittstelle verwendet, um mit irgendeiner AV-Software zu kommunizieren, die auf dem Computer installiert ist. Außerdem benötigt es keine Internetverbindung, was ein Vorteil ist. –

+0

Mein PC installiert AVG Free, kann ich AntiVirusScanner verwenden? –

+0

Ich habe getestet, aber es kann nicht von AV-Software im PC installiert gescannt werden. –

0

Sie können versuchen, DevDragon.io zu verwenden .

Es ist ein Webdienst mit einem API und .NET-Client DevDragon.Antivirus.Client, den Sie von NuGet erhalten können. Scans sind unter 200ms für 1MB Datei.

Mehr Dokumentation hier: https://github.com/Dev-Dragon/Antivirus-Client

Disclosure: Ich für sie arbeiten.