本文实例讲述了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