2009-06-10 17 views
32

Estoy construyendo una aplicación web en la que necesito escanear los archivos cargados por el usuario en busca de virus.API de escaneo de virus .NET

¿Alguien con experiencia en la construcción de algo como esto puede proporcionar información sobre cómo poner esto en funcionamiento? Supongo que los paquetes de software antivirus tienen API para acceder a su funcionalidad programáticamente, pero parece que no es fácil conocer los detalles.

FYI, la aplicación está escrita en C#.

+0

Compruebe esta [pregunta] (http://stackoverflow.com/questions/194013/anti-virus-integration-with-net-application). Debería ser de alguna ayuda. – Shoban

Respuesta

7

Probablemente solo haga una llamada al sistema para ejecutar un proceso independiente para hacer el escaneo. Hay una serie de motores AV de línea de comandos de diversos proveedores.

+2

http://www.clamwin.com/ y http://www.clamav.net/lang/en/ son un buen comienzo. – cofiem

+2

Las cosas pueden haber cambiado en los 6 AÑOS desde que publiqué este – Joe

0

Desde mi experiencia, puede usar COM para interactuar con algún software antivirus. Pero lo que sugeriría es un poco más fácil, simplemente analice los resultados del escaneo después del escaneo. Todo lo que necesita hacer es iniciar el proceso del escáner y señalarlo al archivo/carpeta que desea escanear, almacenar los resultados del escaneo en un archivo o redirigir el estándar a su aplicación y analizar los resultados.

4

Varios escáneres de virus tienen API. Uno con el que me he integrado es Sophos. Estoy bastante seguro de que Norton tiene una API también, mientras que McAfee no (que solía). ¿Qué software de virus quieres usar? Es posible que desee comprobar Metascan, ya que permitirá la integración con muchos escáneres diferentes, pero hay un costo de licencia anual. :-P

7

Eche un vistazo a Microsoft Antivirus API. Hace uso de COM, que debería ser lo suficientemente fácil para interactuar con .NET. Se refiere específicamente a Internet Explorer y Microsoft Office, pero no veo por qué no podría utilizar para escanear cualquier archivo a petición.

Todos los escáneres modernos que se ejecutan en Windows deben comprender esta API.

+0

Creo que API es para C++ no .net. – htm11h

+4

Utiliza COM. Lo que significa que puede usarlo desde .NET – Thorarin

11

Nota importante antes del uso: Tenga en cuenta el acuerdo de TOS. Les da acceso total a todo: "Cuando carga o envía contenido, le da a VirusTotal (y a aquellos con quienes trabajamos) una licencia mundial, libre de regalías, irrevocable y transferible para usar, editar, alojar, almacenar, reproducir, modificar, crear trabajos derivados, comunicar, publicar, realizar públicamente, mostrar públicamente y distribuir dicho contenido ".

En lugar de utilizar un programa local Antivirus (y por lo tanto la unión de su programa para ese producto antivirus en particular y solicitar a sus clientes a instalar ese producto antivirus) que podría utilizar los servicios de VirusTotal.com

Este sitio ofrece un servicio gratuito de cuyo archivo se proporciona como entrada para numerosos productos antivirus y recibe un informe detallado con las evidencias resultantes del proceso de escaneo. De esta manera, su solución ya no está vinculada a un producto antivirus específico (aunque esté vinculado a disponibilidad de Internet)

El sitio también proporciona una interfaz de programación de aplicaciones que permite un enfoque programático de su motor de exploración.

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

Y debido a que hay una respuesta completa sin código, esto es tomado directamente desde el cliente de ejemplo se incluye con el VirusTotal.NET biblioteca

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

}

RENUNCIA
estoy de ninguna manera involucrado con ellos. Estoy escribiendo esta respuesta solo porque parece ser una buena actualización para estas respuestas de 4 años.

+0

Esto parece ser la respuesta real. –

+4

Tenga en cuenta que la solución VirusTotal no es comercial. No permitirán que las API se utilicen en aplicaciones comerciales. – Illuminati

+0

También verificaría su política de privacidad .... – 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

¿Podría escribir aquí una explicación detallada? ¿Dónde encontraría antivirusscanx.exe, por ejemplo? –

8

Puede usar IAttachmentExecute API.

El sistema operativo Windows proporciona la API común para llamar al software antivirus que está instalado (por supuesto, el software antivirus requerido es compatible con la API). Pero, la API para llamar al software antivirus proporciona solo el estilo de interfaz COM, IDispatch no compatible. Por lo tanto, llamar a esta API es demasiado difícil desde cualquier lenguaje .NET y script.

Descargar esta biblioteca de aquí Anti Virus Scanner for .NET o añadir una referencia a su proyecto de VS "NuGet" AntiVirusScanner

Por ejemplo código de abajo analizar un archivo:

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

¡Gracias!Lo que hace que esta solución sea mejor que las otras es que es completamente genérica de manera que utiliza una única interfaz para comunicarse con cualquier software AV instalado en la máquina. Además, no requiere conexión a Internet, lo cual es un plus. –

+0

Mi PC instala AVG Gratis, ¿Puedo usar AntiVirusScanner? –

+0

He probado, pero no puede escanear por el software AV que tenía instalado en la PC. –

0

se puede tratar de utilizar DevDragon.io .

Es un servicio web con una API y cliente .NET DevDragon.Antivirus.Client que puede obtener de NuGet. Los escaneos son sub 200ms para archivos de 1MB.

más documentación aquí: https://github.com/Dev-Dragon/Antivirus-Client

Revelación: Yo trabajo para ellos.