Pythonpyclamad病毒掃描與目錄病毒掃描指令碼(轉載)

sktj發表於2018-01-19

Clam AntiVirus(Clam AV)是一個免費而且開放原始碼的防毒軟體,軟體與病毒庫的更新由開源社群免費釋出,目前ClamdAV主要為Linux、Uinux系統提供病毒掃描查殺pyClamad是一個python的第三方模組,可讓python直接使用ClamAV病毒掃描守護程式clamd來實現一個高效的病毒檢測功能。

一、實現集中式的病毒掃描

1、客戶端(病毒掃描源)安裝clamavp clamd 服務的相關程式包

yum install clamav clamd clamav-update -y

chkconfig clamd on

更新病毒庫

/usr/bin/freshclam

更改配置檔案修改監聽地址到所有網路,啟動服務

sed -i -e `/^TCPAddr/{ s/127.0.0.1/0.0.0.0/;}` /etc/clamd.conf

/etc/init.d/clamd start

2、主控端安裝pyClamd模組 參考:http://xael.org/pages/pyclamd-en.html

pip install pyclamd

驗證安裝結果:

<pre style=”margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(238, 238, 221); text-decoration-style: initial; text-decoration-color: initial;”>>>> import pyclamd

cd = pyclamd.ClamdAgnostic()
cd.ping()
True</pre>

工作原理:管理伺服器通過python發出多執行緒指令連線業務伺服器的3310埠,執行病毒掃描,然後返回結果給管理伺服器。 業務伺服器必須安裝clamd相關程式包,並啟動服務監聽在3310埠才能正常收到指令;可以針對不同業務環境定製相應的掃描策略,比如掃描物件、描述模式、掃描路徑、除錯頻率等。

實現程式碼:simplel.py

[

img_51e409b11aa51c150090697429a953ed.gif
複製程式碼

](javascript:void(0); “複製程式碼”)

<pre style=”margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; font-family: “Courier New” !important; font-size: 12px !important;”> 1 #!/usr/bin/env python
2 # –– coding: utf-8 –
3 import time
4 import pyclamd
5 from threading import Thread
6 class Scan(Thread): #繼承多執行緒Thread類
7 def init (self,IP,scan_type,file):
8 “””構造方法”””
9 Thread.init(self)
10 self.IP = IP
11 self.scan_type=scan_type
12 self.file = file
13 self.connstr=””
14 self.scanresult=””
15 def run(self):
16 “””多程式run方法”””
17 try:
18 cd = pyclamd.ClamdNetworkSocket(self.IP,3310)
19 “””探測連通性”””
20 if cd.ping():
21 self.connstr=self.IP+” connection [OK]”
22 “””過載clamd病毒特徵庫”””
23 cd.reload()
24 “””判斷掃描模式”””
25 if self.scan_type==”contscan_file”:
26 self.scanresult=”{0}
“.format(cd.contscan_file(self.file))
27 elif self.scan_type==”multiscan_file”:
28 self.scanresult=”{0}
“.format(cd.multiscan_file(self.file))
29 elif self.scan_type==”scan_file”:
30 self.scanresult=”{0}
“.format(cd.scan_file(self.file))
31 time.sleep(1)
32 else:
33 self.connstr=self.IP+” ping error,exit”
34 return
35 except Exception,e:
36 self.connstr=self.IP+” “+str(e)
37 IPs=[`172.16.65.201`,`172.16.65.202`] #掃描主機的列表 38 scantype=”multiscan_file” #指定掃描模式,支援 multiscan_file、contscan_file、scan_file
39 scanfile=”/usr/local/bin” #指定掃描路徑
40 i=1
41 threadnum=2 #指定啟動的執行緒數
42 scanlist = [] #儲存Scan類執行緒物件列表
43 for ip in IPs:
44 “””將資料值帶入類中,例項化物件”””
45 currp = Scan(ip,scantype,scanfile)
46 scanlist.append(currp) #追加物件到列表
47 “””當達到指定的執行緒數或IP列表數後啟動執行緒”””
48 if i%threadnum==0 or i==len(IPs):
49 for task in scanlist:
50 task.start() #啟動執行緒
51 for task in scanlist:
52 task.join() #等待所有子執行緒退出,並輸出掃描結果
53 print task.connstr #列印伺服器連線資訊
54 print task.scanresult #列印結果資訊
55 scanlist = [] 56 i+=1</pre>

[

img_51e409b11aa51c150090697429a953ed.gif
複製程式碼

](javascript:void(0); “複製程式碼”)


相關文章