18
18
import gzip
19
19
import xml .etree .cElementTree as eT
20
20
import multiprocessing
21
+ import subprocess
21
22
from .config import project_directory , Config , config_path
22
23
from .log import logger
23
24
from .dependencies import Dependencies
@@ -283,6 +284,24 @@ def download_rule_gz():
283
284
for t in threads :
284
285
t .join ()
285
286
end_time = datetime .datetime .now ()
287
+ for afile in files :
288
+ param = ['file' , afile ]
289
+ p = subprocess .Popen (param , shell = False , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
290
+ res_out , res_err = p .communicate ()
291
+
292
+ res_out = res_out .decode ('utf-8' )
293
+ res_err = res_err .decode ('utf-8' )
294
+
295
+ if 'HTML' in res_out :
296
+ os .remove (afile )
297
+ afile_name = os .path .split (afile )[1 ]
298
+ year = afile_name .split ('.' )[0 ]
299
+ url = "https://static.nvd.nist.gov/feeds/xml/cve/2.0/nvdcve-2.0-" + str (year ) + ".xml.gz"
300
+ try :
301
+ urlretrieve (url , afile )
302
+ except IOError :
303
+ logger .warning ('[CVE] The {} download fail' .format (afile ))
304
+
286
305
logger .info ("All CVE xml file already download success, use time:%ds" % (end_time - start_time ).seconds )
287
306
return files
288
307
@@ -292,11 +311,17 @@ def un_gz(gz_files):
292
311
start_time = datetime .datetime .now ()
293
312
logger .info ("Start decompress rule files, Please wait a moment...." )
294
313
for gz_file in gz_files :
295
- f_name = gz_file .replace (".gz" , "" )
296
- g_file = gzip .GzipFile (gz_file )
297
- open (f_name , "wb+" ).write (g_file .read ())
298
- g_file .close ()
299
- os .remove (gz_file )
314
+ if os .path .exists (gz_file ):
315
+ f_name = gz_file .replace (".gz" , "" )
316
+
317
+ try :
318
+ g_file = gzip .GzipFile (gz_file , "rb" )
319
+ open (f_name , "wb+" ).write (g_file .read ())
320
+ g_file .close ()
321
+ except IOError :
322
+ logger .warning ('[CVE] The {} download fail' .format (gz_file ))
323
+
324
+ os .remove (gz_file )
300
325
end_time = datetime .datetime .now ()
301
326
logger .info ("Decompress success, use time:%ds" % (end_time - start_time ).seconds )
302
327
return True
0 commit comments