python实现集中式的病毒扫描功能详解
作者:cakincqm 时间:2022-03-04 03:16:00
本文实例讲述了python实现集中式的病毒扫描功能。分享给大家供大家参考,具体如下:
一 点睛
本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象、描述模式、扫描路径、调度频率等。案例实现的架构图如下,首先业务服务器开启clamd服务(监听3310端口),管理服务器启用多线程对指定的服务集群进行扫描,扫描模式、扫描路径会传递到clamd,最后返回扫描结果给管理服务器端。
本次实战通过ClamdNetworkSocket()方法实现与业务服务器建立扫描socket连接,再通过启动不同扫描方式实施病毒扫描并返回结果。
二 代码
#!/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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
asp空间判断jmail组件是否安装或支持的代码
如何在Django配置文件里配置session链接
超链“确认”对话框confirm
用代码帮你了解Python基础(3)
如何在浏览器地址栏显示自己的Favicons.ico图标
![](https://img.aspxhome.com/file/UploadPic/200710/22/20071022114816573s.jpg)
python 利用jieba.analyse进行 关键词提取
![](https://img.aspxhome.com/file/2023/5/78575_0s.png)
numpy.random.choice()函数详解
仅允许指定的机器连接SQL Server服务器
Python的子线程和子进程是如何手动结束的?
Python通过文本和图片生成词云图
![](https://img.aspxhome.com/file/2023/3/82963_0s.jpg)
PHP的RSA加密解密方法以及开发接口使用
使用url_helper简化Python中Django框架的url配置教程
python中pop()函数的语法与实例
asp 数组 重复删除函数代码
如何将多宿主计算机配置为允许SQL Server访问
在pandas中遍历DataFrame行的实现方法
![](https://img.aspxhome.com/file/2023/7/75867_0s.jpg)
机器深度学习二分类电影的情感问题
![](https://img.aspxhome.com/file/2023/1/72851_0s.png)