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 相关文章推荐
在Django的URLconf中使用命名组的方法
Jul 18 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
Python中类型检查的详细介绍
Feb 13 Python
django静态文件加载的方法
May 20 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
python实现猜数字游戏
Mar 25 Python
python pygame实现球球大作战
Nov 25 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Python绘制地图神器folium的新人入门指南
May 23 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
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
语义化 H1 标签
2008/01/14 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
python 实现批量图片识别并翻译
2020/11/02 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
在校硕士自我鉴定
2014/01/23 职场文书
电气自动化求职信
2014/06/24 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书