本文实例讲述了python实现集中式的病毒扫描功能。分享给大家供大家参考,具体如下:
一 点睛
本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象、描述模式、扫描路径、调度频率等。案例实现的架构图如下,首先业务服务器开启clamd服务(监听3310端口),管理服务器启用多线程对指定的服务集群进行扫描,扫描模式、扫描路径会传递到clamd,最后返回扫描结果给管理服务器端。
本次实战通过ClamdNetworkSocket()方法实现与业务服务器建立扫描socket连接,再通过启动不同扫描方式实施病毒扫描并返回结果。
二 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#!/usr/bin/env python # -*- coding: utf-8 -*- import time import pyclamd from threading import Thread class Scan(Thread): def __init__ ( self ,IP,scan_type, file ): """构造方法""" Thread.__init__( self ) self .IP = IP self .scan_type = scan_type self . file = file self .connstr = "" self .scanresult = "" def run( self ): """多进程run方法""" try : cd = pyclamd.ClamdNetworkSocket( self .IP, 3310 ) if cd.ping(): self .connstr = self .IP + " connection [OK]" cd. reload () if self .scan_type = = "contscan_file" : self .scanresult = "{0}\n" . format (cd.contscan_file( self . file )) elif self .scan_type = = "multiscan_file" : self .scanresult = "{0}\n" . format (cd.multiscan_file( self . file )) elif self .scan_type = = "scan_file" : self .scanresult = "{0}\n" . format (cd.scan_file( self . file )) time.sleep( 1 ) else : self .connstr = self .IP + " ping error,exit" return except Exception,e: self .connstr = self .IP + " " + str (e) IPs = [ '192.168.0.120' ] scantype = "multiscan_file" scanfile = "/data" i = 1 threadnum = 2 scanlist = [] for ip in IPs: currp = Scan(ip,scantype,scanfile) scanlist.append(currp) if i % threadnum = = 0 or i = = len (IPs): for task in scanlist: task.start() for task in scanlist: task.join() print task.connstr print task.scanresult scanlist = [] i + = 1 |
三 结果
1 无病毒的情况下,扫描结果
E:\Python\python_auto_maintain\venv\Scripts\python.exe E:/Python/python_auto_maintain/4_1_2.py
192.168.0.120 connection [OK]
None
2 有病毒的情况下,扫描结果
2.1 制作病毒测试文件
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
2.2 扫描结果
E:\Python\python_auto_maintain\venv\Scripts\python.exe E:/Python/python_auto_maintain/4_1_2.py
192.168.0.120 connection [OK]
{u'/data/EICAR': ('FOUND', 'Eicar-Test-Signature')}
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/chengqiuming/article/details/87900489