python实现集中式的病毒扫描功能详解


Posted in Python onJuly 09, 2019

本文实例讲述了python实现集中式的病毒扫描功能。分享给大家供大家参考,具体如下:

一 点睛

本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象、描述模式、扫描路径、调度频率等。案例实现的架构图如下,首先业务服务器开启clamd服务(监听3310端口),管理服务器启用多线程对指定的服务集群进行扫描,扫描模式、扫描路径会传递到clamd,最后返回扫描结果给管理服务器端。

 python实现集中式的病毒扫描功能详解

本次实战通过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相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
简化Python的Django框架代码的一些示例
Apr 20 Python
python写日志封装类实例
Jun 28 Python
Python多线程爬虫简单示例
Mar 04 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
numpy中loadtxt 的用法详解
Aug 03 Python
Python unittest单元测试框架总结
Sep 08 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 Python
python 图片去噪的方法示例
Jul 09 #Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 #Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 #Python
python basemap 画出经纬度并标定的实例
Jul 09 #Python
python实现列表中最大最小值输出的示例
Jul 09 #Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 #Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 #Python
You might like
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
Jquery之美中不足小结
2011/02/16 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python复制文件操作实例详解
2015/11/10 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
pytorch实现线性拟合方式
2020/01/15 Python
浅析matlab中imadjust函数
2020/02/27 Python
python实现人脸签到系统
2020/04/13 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
python中的列表和元组区别分析
2020/12/30 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
医院2014国庆节活动策划方案
2014/09/21 职场文书
小班上学期个人总结
2015/02/12 职场文书
员工家属慰问信
2015/03/24 职场文书
药店营业员岗位职责
2015/04/14 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
Redis高并发缓存架构性能优化
2022/05/15 Redis