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之网站的结构
Oct 24 Python
python实现的简单猜数字游戏
Apr 04 Python
django进阶之cookie和session的使用示例
Aug 17 Python
python的依赖管理的实现
May 14 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
Aug 15 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python生成器next方法和send方法区别详解
May 30 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
基于Python爬取股票数据过程详解
Oct 21 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
python垃圾回收机制原理分析
Apr 13 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
MVC模式的PHP实现
2006/10/09 PHP
php array_search() 函数使用
2010/04/13 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
运动会广播稿100字
2014/01/11 职场文书