使用 nClam 和 ClamAV 在 C# 中使用日文字符扫描病毒文件
Virus scanning files with Japanese Characters in C# using nClam and ClamAV
我们一直致力于为上传到我们系统中的文件实施病毒扫描程序 - 它是一个 C# 网络应用程序,我们使用 nClam 插件与 ClamAV server. In a really basic setup (copied from the nClam help) 对话,它看起来像这样
string filePath = "C:\test\jp TEST 昨夜のコンサート.txt";
var clam = new ClamClient("localhost", 3310);
var scanResult = clam.ScanFileOnServer(filePath); //any file you would like!
Console.WriteLine("Japan test");
switch (scanResult.Result)
{
case ClamScanResults.Clean:
Console.WriteLine("The file is clean!");
break;
case ClamScanResults.VirusDetected:
Console.WriteLine("Virus Found!");
Console.WriteLine("Virus name: {0}", scanResult.InfectedFiles.First().VirusName);
break;
case ClamScanResults.Error:
Console.WriteLine("Woah an error occured! Error: {0}", scanResult.RawResult);
break;
}
现在当我尝试 运行 这个时,我总是会从扫描中得到一个错误 - 文件本身只是一个包含一些随机字符的文本文件。我得到的错误是 "No such file or directory. ERROR"
如果我运行 ClamAV 控制台命令扫描文件夹中的文件,它似乎工作正常。我认为这是解码路径的问题,但我尝试了各种编码方案,但它似乎不起作用。
在 nClam 方法中,有一些代码将文件路径解析为 ClamAV 服务器的命令
var commandText = String.Format("z{0}[=11=]", command);
var commandBytes = Encoding.UTF8.GetBytes(commandText);
这会影响日语字符吗?
我得到的解决方案是替换文件名中的所有日文(和其他不受支持的)字符,并在病毒扫描后使用真实的文件名,即
private string ReplaceUnsupportedCharacters(string fileName)
{
const int MaxAnsiCode = 255;
foreach (var illegalChar in fileName.Where(c => c > MaxAnsiCode))
{
fileName = fileName.Replace(illegalChar, '-');
}
return fileName;
}
我宁愿不必这样做,但现在我找不到更好的方法!
我们一直致力于为上传到我们系统中的文件实施病毒扫描程序 - 它是一个 C# 网络应用程序,我们使用 nClam 插件与 ClamAV server. In a really basic setup (copied from the nClam help) 对话,它看起来像这样
string filePath = "C:\test\jp TEST 昨夜のコンサート.txt";
var clam = new ClamClient("localhost", 3310);
var scanResult = clam.ScanFileOnServer(filePath); //any file you would like!
Console.WriteLine("Japan test");
switch (scanResult.Result)
{
case ClamScanResults.Clean:
Console.WriteLine("The file is clean!");
break;
case ClamScanResults.VirusDetected:
Console.WriteLine("Virus Found!");
Console.WriteLine("Virus name: {0}", scanResult.InfectedFiles.First().VirusName);
break;
case ClamScanResults.Error:
Console.WriteLine("Woah an error occured! Error: {0}", scanResult.RawResult);
break;
}
现在当我尝试 运行 这个时,我总是会从扫描中得到一个错误 - 文件本身只是一个包含一些随机字符的文本文件。我得到的错误是 "No such file or directory. ERROR"
如果我运行 ClamAV 控制台命令扫描文件夹中的文件,它似乎工作正常。我认为这是解码路径的问题,但我尝试了各种编码方案,但它似乎不起作用。
在 nClam 方法中,有一些代码将文件路径解析为 ClamAV 服务器的命令
var commandText = String.Format("z{0}[=11=]", command);
var commandBytes = Encoding.UTF8.GetBytes(commandText);
这会影响日语字符吗?
我得到的解决方案是替换文件名中的所有日文(和其他不受支持的)字符,并在病毒扫描后使用真实的文件名,即
private string ReplaceUnsupportedCharacters(string fileName)
{
const int MaxAnsiCode = 255;
foreach (var illegalChar in fileName.Where(c => c > MaxAnsiCode))
{
fileName = fileName.Replace(illegalChar, '-');
}
return fileName;
}
我宁愿不必这样做,但现在我找不到更好的方法!