| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 
 | #encoding:utf-8"""
 @author:Liod
 @file:main.py
 @time:18-1-19上午11:47
 """
 
 import requests,re,datetime,smtplib,time,sys
 from lxml import etree
 from email.mime.text import MIMEText
 from email.header import Header
 from setting import *
 from selenium import webdriver
 import logging
 
 class BugSpider(object):
 
 def __init__(self):
 self.bugUrl = "http://www.cnvd.org.cn/webinfo/list?type=14"
 self.requests = requests.session()
 self.mail = ["mail.***.gov.cn", "*******", "*****"]
 self.responseContent = self.getUrlResponse_Result()
 
 
 def spiderBaner(self):
 headers = {
 "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
 "User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0",
 "Referer":"http://www.cnvd.org.cn/",
 "Accept-Language":"zh-CN,zh;q=0.9",
 "Cookie":self.getCookie(),
 "Host":"www.cnvd.org.cn",
 "Cache-Control":"no-cache",
 "Pragma":"no-cache",
 "Connection":"keep-alive"
 }
 
 return headers
 
 
 def getUrlResponse_Result(self):
 responseResult = {}
 response = self.requests.get(self.bugUrl, headers = self.spiderBaner())
 
 data = re.findall(r'<td width="13%">(.*?)</td>' , response.content)
 current_click = re.findall(r'<td width="9%">(.*?)</td>', response.content)
 pageTree = etree.HTML(response.content)
 href = map(lambda x:self.bugUrl.split("/")[0] + "//" + self.bugUrl.split("/")[2] + x, pageTree.xpath('//tr/td/a/@href'))
 title = map(lambda x:x.strip(), pageTree.xpath('//tr/td/a/text()'))
 for i in range(0, len(title)):
 if data[i] in responseResult.keys():
 responseResult["%s"%(data[i])].insert(-1, [title[i], href[i], data[i], current_click[i]])
 else:
 responseResult["%s"%(data[i])] = [[title[i], href[i], data[i], current_click[i]]]
 self.responseContent = responseResult
 return responseResult
 
 
 def getDateUpdate(self, dateResult):
 dateRes = filter(lambda x:x, dateResult)
 yestday = datetime.date.today() - datetime.timedelta(days=2)
 yestdayTime = yestday.strftime("%Y-%m-%d")
 nowTime = datetime.datetime.now().strftime("%Y-%m-%d")
 # return filter(lambda x:x==nowTime, dateResult)
 updateDate = filter(lambda x: x >= yestdayTime, dateRes)
 # return map(lambda x: dateResult[x], updateDate)
 #return filter(lambda x:x==yestdayTime, dateResult)     # 返回昨天的漏洞信息
 return filter(lambda x:x==nowTime, dateResult)    #返回今天的漏洞信息
 
 def modileText(self, code=-1):
 if code == -1:
 result = ""
 modileKey = self.getDateUpdate(self.responseContent)
 modileText = map(lambda x: self.responseContent["%s"%x], modileKey)
 for i in modileText[0]:     #这里只返回第一个因为判断邮件播报的是一天内的
 result += u"漏洞标题:  %-39s\n详细信息:%-45s\n漏洞预警时间:%-10s \n漏洞点击量:%s \n\n\n"%(i[0], i[1], i[2], i[3])
 ress = """%s"""%result
 return ress
 else:
 return u"""暂时未有漏洞"""
 
 def sendMail(self, receiveMailName=[], receiveAuthor="" , code=-1):
 nowTime = datetime.datetime.now().strftime("%Y-%m-%d")
 message = MIMEText('%s\n%s\n%s' % (u'信息安全漏洞预警:', self.modileText(code), u'cnvdspider!!'), 'plain', 'utf-8')
 message['From'] = "信息安全预警 <%s>" % "hngsteam@icsp.org.cn"
 message['To'] = ",".join(receiveAuthor)
 if receiveAuthor == adminList():
 subject = "%s 管理员你好!今天未发现新的漏洞预警!" % nowTime
 else:
 subject = "%s 您收到一个新的信息安全漏洞预警!" % nowTime
 subject = "%s  漏洞预警"%nowTime
 message['Subject'] = Header(subject, 'utf-8')
 sendAuthor = "test@test.com"
 try:
 mailServer = smtplib.SMTP(self.mail[0], 25)
 mailServer.login(self.mail[1], self.mail[2])
 mailServer.sendmail(sendAuthor, receiveMailName, message.as_string())
 mailServer.close()
 print u"邮件发送成功"
 except Exception as e:
 print e
 
 def getCookie(self):
 self.spiderFirefox = webdriver.Firefox()
 self.spiderFirefox.get(self.bugUrl)
 time.sleep(5)
 cookies = ""
 for cookie in self.spiderFirefox.get_cookies():
 cookies += u"%s=%s; "%(cookie["name"], cookie["value"])
 self.spiderFirefox.close()
 return cookies
 
 def checkResponseBug(self):
 """
 @函数方法:函数检测今日是否有漏洞,无漏洞发送管理员,有漏洞全体发送
 :return:
 """
 if self.getDateUpdate(self.getUrlResponse_Result()) == []:
 self.sendMail(receiveMailName=adminList(), receiveAuthor=adminList(), code=1)
 else:
 self.sendMail(receiveMailName=userlist(), receiveAuthor=userlist())
 
 if __name__ == "__main__":
 from apscheduler.schedulers.blocking import BlockingScheduler
 from datetime import date
 logging.basicConfig()
 try:
 sched = BlockingScheduler()
 a = BugSpider()
 #a.checkResponseBug()
 #job = sched.add_job(a.checkResponseBug, 'interval', seconds=10)
 job = sched.add_job(a.checkResponseBug, 'cron', hour='10,12,15,17,18', minute="10", second="0")
 sched.start()
 except Exception as e:
 print e
 
 |