मैं एक बहुत ही समान समस्या को हल करने के लिए देख रहा था, और स्मृति स्कैनिंग में बहुत कुछ नहीं मिला। अधिकांश उदाहरणों में मुझे डिस्क पर फ़ाइल लिखना शामिल है, और फिर डिस्क पर फ़ाइल को स्कैन करने के लिए किसी अन्य प्रक्रिया में कुछ चर पारित करके स्कैनिंग शामिल है।
तो मैंने जिस समाधान में उपयोग किया है, मैं केवल HttpPostedFileBase.InputStream
का उपयोग करता हूं, और इसे स्कैमएव को स्कैन करने के लिए भेजता हूं। एमवीसी और उसके क्यूईडी में काम करने के लिए बहुत कुछ कोड नहीं है।
/// Main controller
public class HomeController : Controller {
/// Get the upload view
[HttpGet]
public ActionResult Index() {
return View();
}
/// Handle the file upload
[HttpPost]
public ActionResult Index(UploadViewModel model, HttpPostedFileBase file) {
var scanner = VirusScannerFactory.GetVirusScanner();
var result = scanner.ScanStream(file.InputStream);
if(result.IsVirusFree) {
// save to disk
} else {
// don't save to disk and tell user they uploaded a virus
}
return View(model);
}
}
VirusScannerFactory का कार्यान्वयन अपने ए वी विक्रेता सूट करने के लिए बढ़ाया जा सकता है:
तो अपने MVC नियंत्रक में, आप कुछ इस तरह होगा।
public class VirusScannerFactory {
public static IScanViruses GetVirusScanner() {
//Currently we only have one Antivirus implementation,
//but later we want to include AVG, SOPHOS and metascan
return new ClamAvScanner();
}
}
public interface IScanViruses {
ScanResult ScanFile(string fullPath);
ScanResult ScanBytes(byte[] bytes);
ScanResult ScanStream(Stream stream);
}
मैंने उदाहरण के रूप में nClam और ClamAv का उपयोग किया है। पूर्ण ClamAV कार्यान्वयन found on github हो सकता है, लेकिन आप इसे स्मृति के लिए काम धाराओं कैसे मिल का एक टुकड़ा
नीचे
public class ClamAvScanner : IScanViruses{
... snip ...
/// Scans your data stream for virus
public ScanResult ScanStream(Stream stream) {
var clam = new ClamClient("localhost", 3310);
return MapScanResult(clam.SendAndScanFile(stream));
}
...snip ...
/// helper method to map scan result
private ScanResult MapScanResult(ClamScanResult scanResult) {
var result = new ScanResult();
switch (scanResult.Result) {
case ClamScanResults.Unknown:
result.Message = "Could not scan file";
result.IsVirusFree = false;
break;
case ClamScanResults.Clean:
result.Message = "No Virus found";
result.IsVirusFree = true;
break;
case ClamScanResults.VirusDetected:
result.Message = "Virus found: " + scanResult.InfectedFiles.First().VirusName;
result.IsVirusFree = false;
break;
case ClamScanResults.Error:
result.Message = string.Format("VIRUS SCAN ERROR! {0}", scanResult.RawResult);
result.IsVirusFree = false;
break;
}
return result;
}
}
मैं कैसे ClamAV के साथ ऐसा करने का पूरा विवरण के साथ एक blog post बनाई गई है।
स्रोत
2015-09-02 20:20:49
हाय, मैं सोच रहा था अगर आप साझा कर सकता है कि कैसे आप इस काम के पाने में कामयाब रहे, और जो समाधान आप सबसे अच्छा उपयोग करने के लिए मिल गया? –
आप IAttachmentExecute API का उपयोग कर सकते हैं। [यह उत्तर आप मदद कर सकते हैं] (http://stackoverflow.com/a/35684198/1442180) – Fred
आप IAttachmentExecute API का उपयोग कर सकते हैं। [यह उत्तर आप मदद कर सकते हैं] (http: // stackoverflow।कॉम/ए/35684198/1442180) – Fred