扫描上传的文件c# ASP.net

本文关键字:ASP net 文件 扫描 | 更新日期: 2023-09-27 18:08:29

我正在尝试对上传的文件进行病毒扫描。我无法控制已安装的病毒扫描程序,该产品由使用不同扫描程序的多方托管。

我尝试了以下库,但它总是在eicar文件上返回VirusNotFound。https://antivirusscanner.codeplex.com/

你知道其他的解决方法吗?

扫描上传的文件c# ASP.net

ClamAV的检测分数很差。VirusTotal不在本地。

我决定为多个扫描器创建CLI包装器,nuget包可以在这里找到:https://www.nuget.org/packages?q=avscan

其文档和源代码可在https://github.com/yolofy/AvScan

我为。net使用了这个库(它使用了VirusTotal公共api):

https://github.com/Genbox/VirusTotal.NET

一个来自github的小例子:

static void Main(string[] args)
{
    VirusTotal virusTotal = new VirusTotal("INSERT API KEY HERE");
    //Use HTTPS instead of HTTP
    virusTotal.UseTLS = true;
    FileInfo fileInfo = new FileInfo("testfile.txt");
    //Create a new file
    File.WriteAllText(fileInfo.FullName, "This is a test file!");
     //Check if the file has been scanned before.
    Report fileReport = virusTotal.GetFileReport(fileInfo).First();
    bool hasFileBeenScannedBefore = fileReport.ResponseCode == 1;
    if (hasFileBeenScannedBefore)
    {
        Console.WriteLine(fileReport.ScanId);
    }
    else
    {
        ScanResult fileResults = virusTotal.ScanFile(fileInfo);
        Console.WriteLine(fileResults.VerboseMsg);
    }
}

一个完整的例子可以在这里找到:

https://github.com/Genbox/VirusTotal.NET/blob/master/VirusTotal.NET%20Client/Program.cs

蛤蜊AV相当不错。https://www.clamav.net/downloads

c# Api:https://github.com/michaelhans/Clamson/

我只是尝试了各种方法,但有些不起作用。然后我决定使用ESET NOD32命令行工具。

这对我来说很好:

 public bool Scan(string filename)
    {
        var result = false;
        try
        {
            Process process = new Process();
            var processStartInfo = new ProcessStartInfo(@"C:/Program Files/ESET/ESET Security/ecls.exe")
            {
                Arguments = $" '"{filename}'"",
                CreateNoWindow = true,
                ErrorDialog = false,
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = false
            };
            process.StartInfo = processStartInfo;
            process.Start();
            process.WaitForExit();
            if (process.ExitCode == 0) //if it doesn't exist virus ,it returns 0 ,if not ,it returns 1    
            {
                result = true;
            }
        }
        catch (Exception)
        { //nothing;
        }
        
        return result;
        }