我正在构建一个Web应用程序,我需要扫描用户上传的文件以查找病毒.
有这方面经验的人是否可以提供有关如何启动和运行的信息?我猜测防病毒软件包有API以编程方式访问它们的功能,但似乎要轻易搞定细节.
仅供参考,该应用程序是用C#编写的.
使用前的重要提示: 请注意本服务协议.您可以授予他们对所有内容的完全访问权限:"当您上传或以其他方式提交内容时,您可以使用VirusTotal(以及我们合作的人)使用,免版税,不可撤销且可转让的许可证,以便使用,编辑,托管,存储,复制,修改,创建衍生作品,沟通,发布,公开表演,公开展示和分发此类内容."
您可以使用VirusTotal.com的服务,而不是使用本地防病毒程序(从而将您的程序绑定到该特定的防病毒产品并请求您的客户安装该防病毒产品).
此站点提供免费服务,您的文件作为输入提供给众多防病毒产品,您将收到一份详细报告,其中包含扫描过程产生的证据.通过这种方式,您的解决方案不再与特定的防病毒产品绑定(尽管您已绑定到Internet可用性)
该站点还提供了一个应用程序编程接口,允许以编程方式接近其扫描引擎.
这里有一个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年答案的一个很好的更新.
您可以使用IAttachmentExecute API.
Windows操作系统提供通用API来调用已安装的防病毒软件(当然,需要支持API的防病毒软件).但是,调用反病毒软件的API仅提供COM接口样式,不支持IDispatch.因此,从任何.NET语言和脚本语言调用此API都太困难了.
从此处下载此库Antiversion Scanner for .NET或从"NuGet" AntiVirusScanner添加引用您的VS项目
例如,下面的代码扫描一个文件:
var scanner = new AntiVirus.Scanner(); var result = scanner.ScanAndClean(@"c:\some\file\path.txt"); Console.WriteLine(result); // console output is "VirusNotFound".
我可能只是进行系统调用来运行一个独立的进程来进行扫描.各种供应商都有许多命令行AV引擎.
看一下Microsoft Antivirus API.它使用COM,它应该很容易与.NET接口.它特指Internet Explorer和Microsoft Office,但我不明白为什么您无法使用按需扫描任何文件.
在Windows上运行的所有现代扫描仪都应该了解此API.