2009-06-10 5 views
32

사용자 업로드 파일에서 바이러스를 검사해야하는 웹 응용 프로그램을 구축하고 있습니다..NET 바이러스 검색 API

이와 같은 것을 구축 한 경험이있는 사람이라면 누구나이 기능을 사용하고 실행하는 방법에 대한 정보를 제공 할 수 있습니까? 바이러스 백신 소프트웨어 패키지에는 프로그래밍 방식으로 기능에 액세스 할 수있는 API가 있지만 추측하기는 쉽지 않은 것 같습니다.

참고로 응용 프로그램은 C#으로 작성되었습니다.

+0

이 [질문] (http://stackoverflow.com/questions/194013/anti-virus-integration-with-net-application)을 확인하십시오. 도움이되어야합니다. – Shoban

답변

7

아마 스캔을 수행하기 위해 독립적 인 프로세스를 실행하기 위해 시스템 호출을해야 할 것입니다. 다양한 공급 업체의 수많은 명령 줄 AV 엔진이 있습니다.

+2

http://www.clamwin.com/ 및 http://www.clamav.net/lang/en/이 좋은 시작입니다. – cofiem

+2

내가이 – Joe

0

제 경험으로 COM을 사용하여 일부 안티 바이러스 소프트웨어와 인터페이스 할 수 있습니다. 그러나 내가 제안하는 것은 조금 더 쉬우 며, 스캔 한 후에 스캔 결과를 구문 분석합니다. 스캐너 프로세스를 시작하고 스캔 할 파일/폴더를 가리키고 스캔 결과를 파일에 저장하거나 stdout을 응용 프로그램으로 리디렉션하고 결과를 파싱하기 만하면됩니다.

4

다양한 바이러스 스캐너에는 API가 있습니다. 제가 통합 한 것은 소포스입니다. 나는 Norton이 API를 가지고 있다는 사실을 확신하지만 McAfee는 그렇지 않았습니다. 어떤 바이러스 소프트웨어를 사용 하시겠습니까? Metascan을 확인하면 다양한 스캐너와의 통합이 가능하지만 연간 라이센스 비용이 있습니다. :-P

7

Microsoft Antivirus API을 살펴보십시오. COM을 사용하므로 .NET에서 쉽게 인터페이스 할 수 있어야합니다. 특히 Internet Explorer와 Microsoft Office를 언급하지만 필자가 주문형 검색에 사용할 수없는 이유는 없습니다.

Windows에서 실행되는 모든 최신 스캐너는이 API를 이해해야합니다.

+0

을 게시 한 이래로 상황이 6 년 만에 변경되었을 수 있습니다. API가 C++이 아니라 .net이 될 것이라고 믿습니다. – htm11h

+4

COM을 사용합니다. 즉, .NET에서 사용할 수 있다는 의미입니다. – Thorarin

11

사용 전주의 사항 : TOS 약관을 숙지하십시오. "귀하가 컨텐츠를 업로드 또는 제출할 때 귀하는 VirusTotal (및 당사가 공동으로 작업하는 사람)에게 사용, 편집, 호스팅, 저장, 복제, 수정 및 전송할 수있는 전 세계적이고 로열티가 없으며 취소 불가능하며 양도가 가능한 라이센스를 제공합니다. 의사 소통 작품을 만들고, 전달하고, 공개적으로 공연하고, 공개적으로 전시하고 배포 할 수 있습니다. " 대신 당신이 VirusTotal.com

이 사이트의 서비스를 사용할 수 있습니다 (안티 바이러스 제품이 있음을 설치하는 고객을 따라서 특정 안티 바이러스 제품에 프로그램을 바인딩 요청) 로컬 바이러스 백신 프로그램을 사용

는 무료 서비스를 제공합니다 귀하의 파일은 수많은 바이러스 백신 제품에 대한 입력으로 제공되며 검사 프로세스로 인한 증거로 상세한 보고서를 받게됩니다. 이 방법으로 귀하의 솔루션은 더 이상 특정 안티 바이러스 제품에 바인딩되지 않습니다. (인터넷에 연결되어 있음에도 불구하고)

이 사이트는 프로그래밍 엔진을 사용하여 프로그래밍 방식으로 검색 엔진을 제공합니다. Here the comprensive documentation about their API
Here the documentation with examples in Python of their interface

그리고 아무 대답이 코드없이 완전하지 않기 때문에, 이것은 VirusTotal 함께 제공되는 샘플 클라이언트에서 직접 촬영

Here a VirusTotal.NET a library for this API

.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 년 된 답변에 대한 좋은 업데이트 인 것 같아서이 답변을 작성했습니다.

+0

이것은 실제 답변처럼 보입니다. –

+4

VirusTotal 솔루션은 비상업적이므로 유의하십시오. API가 상용 응용 프로그램에서 사용되는 것을 허용하지 않습니다. – Illuminati

+0

나는 또한 그들의 개인 정보 보호 정책을 체크 아웃 할 것이다 .... – 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

여기에서 자세한 설명을 보내 주시겠습니까? 예를 들어 어디에서 antivirusscanx.exe를 찾을 수 있습니까? –

1

뻔뻔 플러그하지만 https://scanii.com을 확인 할 수 있습니다, 그것은 (REST) ​​서비스로 기본적으로 악성 코드/바이러스 탐지합니다. 오, 또한 virustotal의 API 조항 (https://www.virustotal.com/en/documentation/public-api/)을 읽고 이해하십시오. 상업적 사용을 허용하지 않는 것에 대해 매우 분명합니다.

8

IAttachmentExecute API를 사용할 수 있습니다.

Windows OS는 설치된 안티 바이러스 소프트웨어를 호출하는 공통 API를 제공합니다 (물론 안티 바이러스 소프트웨어가 API를 지원해야합니다). 그러나 안티 바이러스 소프트웨어를 호출하는 API는 COM 인터페이스 스타일 만 제공하며 지원되는 IDispatch는 제공하지 않습니다. 그래서이 API를 호출하는 것은 .NET 언어 및 스크립트 언어에서 너무 어렵습니다.

다운로드 여기 Anti Virus Scanner for .NET에서이 라이브러리 또는 AntiVirusScanner 예를 들어

를 넣고 코드는 파일 스캔 "NuGet"에서 참조 귀하의 VS 프로젝트를 추가 :

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

감사합니다.이 솔루션을 다른 솔루션보다 효과적으로 만드는 것은 단일 인터페이스를 사용하여 컴퓨터에 설치된 모든 AV 소프트웨어와 통신하는 방식으로 완전히 일반화 된 것입니다. 또한 더하기 인터넷 연결이 필요하지 않습니다. –

+0

내 PC에 AVG Free를 설치하면 AntiVirusScanner를 사용할 수 있습니까? –

+0

테스트를 통과했지만 PC에 설치된 AV 소프트웨어로는 스캔 할 수 없습니다. –

0

당신은 DevDragon.io를 사용하려고 할 수 있습니다 .

NuGet에서 얻을 수있는 API 및 .NET 클라이언트 DevDragon.Antivirus.Client가있는 웹 서비스입니다. 검사는 1MB 파일의 경우 200ms 이하입니다. 여기

더 많은 문서 : https://github.com/Dev-Dragon/Antivirus-Client

공개 : 나는 그들을 위해 일한다.