您的位置:首页 > 编程语言 > Python开发

python笔记系列:Python与系统安全-pyClamad

2018-03-26 13:53 190 查看
Python与系统安全Clam AntiVirus(ClamAV)免费而开源的防毒软件,主要针对Linux、UnixpyClamad Python第三方模块,可让python直接使用ClamAV病毒扫描守护进程,实现病毒检测
客户端安装:yum install -y clamav clamd clamav-update centos6.5上直接安装会报错,先执行下述语句:yum install epel-release -ychkconfig --levels 235 clamd on #添加扫描守护进程clamd系统服务/usr/bin/freshclam #更新病毒库,建议配置到crontab中定期更新setenforce 0 #关闭SELinux,避免远程扫描时提示无权限问题#更新守护进程监听IP配置文件,0.0.0.0为监听所有主机IPsed -i -e '/^TCPAddr/{ s/127.0.0.1/0.0.0.0/; }' /etc/clamd.conf/etc/init.d/clamd start #默认监听端口:3310
主控端部署pyClamadwget http://xael.org/norman/python/pyclamd/pyClamd-0.3.4.tar.gztar -zxvf pyClamd-0.3.4.tar.gzcd pyClamd-0.3.4python setup.py install
pyClamd提供了两个关键类ClamdNetworkSocket() 使用网络套接字操作clamdClamUnixSocket() 使用Unix套接字操作clamd__init__(self,host='127.0.0.1',port=3310,timeout=None) #port与/etc/clamd.conf中TCPSocket参数一致contscan_file(self.file) 扫描指定文件或目录,发生错误或发现病毒不终止,file为绝对路径multiscan_file(self,file) 多线程扫描,发生错误或发现病毒不终止scan_file(self,file) 扫描指定文件或目录,发生错误或发现病毒不终止shutdown(self) 强制关闭clamd并退出stats(self) 获取Clamscan当前状态reload(self) 强制重载clamd病毒库,扫描前建议执行EICAR(self) 返回EICAR测试字符串,即生成具有病毒库的字符串,便于测试
实践:实现集中式病毒扫描#!/usr/bin/env python# -*- coding: utf-8 -*-import timeimport pyclamdfrom 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.1.21','192.168.1.22'] #扫描主机列表scantype="multiscan_file" #指定扫描模式,可选:multiscan_file contscan_file scan_filescanfile="/data/www" #指定扫描路径i=1threadnum=2 #启动线程数scanlist = [] #存储扫描Scan类线程对象列表for ip in IPs: currp = Scan(ip,scantype,scanfile) #创建扫描Scan类对象 scanlist.append(currp) #追加对象到列表 if i%threadnum==0 or i==len(IPs): #达到指定线程数或IP列表数后启动、退出线程 for task in scanlist: task.start() #启动线程 for task in scanlist: task.join() #等待所有子线程退出,并输出扫描结果 print task.connstr #打印服务器连接信息 print task.scanresult #打印扫描结果 scanlist = [] i+=1
在已安装clamav的被控端安装pyclamd模块后,通过EICAR()方法生成一个带有病毒特征的文件/tmp/EICAR,代码如下:  >>> import pyclamd  >>> cd = pyclamd.ClamdNetworkSocket()  >>> void = open('/tmp/EICAR','w').write(cd.EICAR())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python pyClamd