-
贴一贴本身写的文件监控代码python
添加时间:2013-5-18 点击量:1
2 Created on 2013-1-29
3
4 @author: zsy
5
6 import os.path
7 import time
8 import smtplib
9 email.mime.text import MIMEText
10 email.mime.multipart import MIMEMultipart
11 email.mime.audio import MIMEAudio
12
13 class Scanner():
14 def isExists(self,saveFile):
15 return os.path.isfile(saveFile)
16
17 def getFileName(self,targetDir,whiteDir):
18 export = []
19 export_notime=[]
20 for root, dirs, fileNames in os.walk(targetDir):
21 for i,dirname in enumerate(dirs):
22 if dirname in whiteDir:del dirs[i]
23 if fileNames:
24 for filename in fileNames:
25 filepath=os.path.join(root,filename)
26 if os.path.islink(filepath):
27 continue
28 try:
29 filetime=time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(os.stat(filepath).st_mtime))
30 export.append(filepath+------+filetime+\n)
31 export_notime.append(filepath)
32 except:
33 export.append(filepath+\n)
34 export_notime.append(filepath)
35 return export,export_notime
36
37 def scan(self,targetDir,whiteDir, saveFile):
38 file = open(saveFile, w)
39 scanlist,scanlist_notime=self.getFileName(targetDir,whiteDir)
40 for ifile in scanlist:
41 try:
42 file.write(ifile)
43 except:
44 file.write(ifile.encode(utf-8).decode(gbk))
45 file.close()
46 return scanlist,scanlist_notime
47
48 def rescan(self,targetDir,whiteDir,saveFile,changFile):
49 #get filelist,filelist_notime savefile
50 filelist = []#filelist scanned before
51 filelist_notime=[]
52 read = open(saveFile, r)
53 line = read.readline()
54 while line:
55 linenotime=line.split(------)[0]
56 filelist.append(line)
57 filelist_notime.append(linenotime)
58 line = read.readline()
59 read.close()
60 #get scanlist,scanlist_notime scan method
61 scanlist,scanlist_notime = self.scan(targetDir,whiteDir,saveFile)#filelist scanned current
62
63 #get list,addlist,modifylist
64 fileset = set(filelist)
65 fileset_notime=set(filelist_notime)
66 scanset = set(scanlist)
67 scanset_notime=set(scanlist_notime)
68
69 list=[i for i in fileset_notime-scanset_notime]
70
71 addlist_notime=[i for i in scanset_notime-fileset_notime]
72 addlist=[]
73 for item in addlist_notime:
74 mtime = time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(os.stat(item).st_mtime))
75 addlist.append(item+------+mtime+\n)
76
77 modifylist=[i for i in scanset-fileset]
78 modifylist=[i for i in set(modifylist)-set(addlist)]
79
80 sendstr=
81
82 #write list,addlist,modifylist to changefile and mail to manager
83 if list.__len__() > 0:
84 fchange=open(changeFile,a)
85 title=\n+time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time()))+ d files \n
86 fchange.write(title)
87 sendstr+=title
88 i=0
89 for file in list:
90
91 if .js in file:
92 try:
93 fchange.write(str(i)+ +js: +file.encode(utf-8).decode(gbk)+\n)# change_file
94 except:
95 fchange.write(str(i)+ +js: +file+\n)# change_file
96 sendstr+=str(i)+ +js: +file+\n
97
98 elif index. in file:
99 try:
100 fchange.write(str(i)+ +index: +file.encode(utf-8).decode(gbk)+\n)# change_file
101 except:
102 fchange.write(str(i)+ +index: +file+\n)# change_file
103 sendstr+=str(i)+ +index: +file+\n
104
105 else:
106 try:
107 fchange.write(str(i)+ +file.encode(utf-8).decode(gbk)+\n)# change_file
108 except:
109 fchange.write(str(i)+ +file+\n)# change_file
110 sendstr+=str(i)+ +file+\n
111
112 i+=1
113 fchange.close()
114
115 if addlist.__len__() > 0:
116 fchange=open(changeFile,a)
117 title=\n+time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time()))+ added files \n
118 fchange.write(title)
119 sendstr+=title
120 i=0
121 for addfile in addlist:
122
123 if .js in addfile:
124 try:
125 fchange.write(str(i)+ +js: +addfile.encode(utf-8).decode(gbk))# change_file
126 except:
127 fchange.write(str(i)+ +js: +addfile)# change_file
128 sendstr+=str(i)+ +js: +addfile
129
130 elif index. in addfile:
131 try:
132 fchange.write(str(i)+ +index: +addfile.encode(utf-8).decode(gbk))# change_file
133 except:
134 fchange.write(str(i)+ +index: +addfile)# change_file
135 sendstr+=str(i)+ +index: +addfile
136
137 else:
138 try:
139 fchange.write(str(i)+ +addfile.encode(utf-8).decode(gbk))# change_file
140 except:
141 fchange.write(str(i)+ +addfile)# change_file
142 sendstr+=str(i)+ +addfile
143
144 i+=1
145 fchange.close()
146
147 if modifylist.__len__()>0:
148 fchange=open(changeFile,a)
149 title=\n+time.strftime(%Y-%m-%d %H:%M:%S,time.localtime(time.time()))+ modified files \n
150 fchange.write(title)
151 sendstr+=title
152 i=0
153 for modifyfile in modifylist:
154
155 if .js in modifyfile:
156 try:
157 fchange.write(str(i)+ +js: +modifyfile.encode(utf-8).decode(gbk))# change_file
158 except:
159 fchange.write(str(i)+ +js: +modifyfile)# change_file
160 sendstr+=str(i)+ +js: +modifyfile
161
162 elif index. in modifyfile:
163 try:
164 fchange.write(str(i)+ +index: +modifyfile.encode(utf-8).decode(gbk))# change_file
165 except:
166 fchange.write(str(i)+ +index: +modifyfile)# change_file
167 sendstr+=str(i)+ +index: +modifyfile
168
169 else:
170 try:
171 fchange.write(str(i)+ +modifyfile.encode(utf-8).decode(gbk))# change_file
172 except:
173 fchange.write(str(i)+ +modifyfile)# change_file
174 sendstr+=str(i)+ +modifyfile
175
176 i+=1
177 fchange.close()
178
179 if sendstr.__len__()>0:
180 self.sendMail(sendstr)#send changefile to mail
181
182
183 def sendMail(self,body):
184 m=MIMEMultipart()
185 m[]=TiaoZhanServer
186 m[subject]=file_record__botwarden210
187 m.attach(MIMEText(body,plain,utf-8))#charset
188
189 smtpserver=smtplib.SMTP(smtp.163.com)
190 smtpserver.login(tiaozhanfilerecord@163.com, tiaozhan)
191 add=tiaozhanfilerecord@163.com
192 toadds=[xxxxxxx@qq.com]
193 for toadd in toadds:
194 m[to]=toadd
195 smtpserver.sendmail(add, toadd, m.as_string())
196 smtpserver.close()
197
198 if __name__ == __main__:
199 Dir = /home/www
200 whiteDir=[cache,data]
201 myFile = /home/zsy/FileRecord_py/file_record.txt
202 changeFile=/home/zsy/FileRecord_py/file_change_record.txt
203
204 # Dir = e:\\
205 # whiteDir=[myeclipseworkspace]
206 # myFile = e:\\file_record.txt
207 # changeFile=e:\\file_change_record.txt
208
209 scanner=Scanner()
210 if scanner.isExists(myFile):
211 scanner.rescan(Dir,whiteDir,myFile,changeFile)
212 else:
213 scanner.scan(Dir,whiteDir,myFile)首要用于监控web办事器上的web目次,防止被黑客批改文件或上传小马用。
file_record.txt用于记录当前目次下的所有文件。
file_change_record.txt用于记录本次扫描相对于前次扫描产生的改变。
完了会发邮件给指定的经管员邮箱。
后来知道linux下有本身的监控对象可以用,安装一下很便利。
http://www.cnblogs.com/peterpanzsy/archive/2013/05/18/3084961.html
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
