crawler_exa4

2023-12-10 19:59
文章标签 crawler exa4

本文主要是介绍crawler_exa4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

优化中...

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Tdcqma'''获取漏洞目标站点:绿盟安全漏洞通告v1.0:由于网站结构存在变更的可能性,一旦爬虫爬取的页面发生变化则会影响正则表达式的匹配,导致爬虫失效。为了解决这个问题重新架构该爬虫,新的爬虫将分3个部分,即:【1】信息收集:一旦网站结构发生变化只需要更改此部分的正则表达式即可,收集的信息需要保存至一个嵌套列表中。【2】信息筛选:即使网站结构发生变化也不需要变更此部分。【3】信息发送:即使网站结构发生变化也不需要变更此部分。
v1.1添加 "风险级别" 功能到报警信息中,由【CVE 通用漏洞与披露】库中获取对应漏洞的风险级别
v1.2添加漏洞总数功能
v1.3删除"风险级别"选项,因为http://cve.scap.org.cn/站点故障优化代码
v1.4使用BeautifulSoup模块优化内容搜索
v1.5优化模块2(信息筛选),对信息进行按系统分类显示
v1.6优化v1.5部分,对代码部分进行函数化整理
'''import urllib.request
import ssl,re
import smtplib,email
import datetime
from bs4 import BeautifulSoup# ---------------------------------------------
# 【1】信息收集,正则表达匹配网站信息,包括date、title、url等,
#      将所有信息保存至sec_all_list列表中
# ---------------------------------------------

f = open("secInfo-lvmeng.txt", 'w', encoding='utf-8')# 爬虫爬取当天的漏洞告警信息,也可指定如2017-10-09样式的日期格式用于开发过程中的测试
#today = str(datetime.date.today())
today = "2017-09-28"# 指定爬虫网站的首页链接
sec_vul_domain = "http://www.nsfocus.net/"# 生成字典用于保存漏洞网站的跳转链接
vul_dict = {}# 该变量保存漏洞跳转页面链接:http://www.nsfocus.net/index.php?act=sec_bug
sec_vul_homepage = ""# 收集所有漏洞信息并保存在列表中
sec_all_list = []# 将列表漏洞转换为字符串
data_str = ""# 将需要监控的系统名称添加至该列表即可实现爬虫功能
system_list = ["Apache","Cisco","Samba","Dnsmasq","Microsoft"]# 该变量保存所有指定系统的格式化后的漏洞信息,邮件发送也是基于该变量里保存的漏洞信息
all_vul_msg = ""# 计算漏洞总数
count = 0# 传入不同的page链接以获取相应response
def get_response(vul_url):request = urllib.request.Request(vul_url)# 当尝试访问https开始当站点时,设置全局取消SSL证书验证ssl._create_default_https_context = ssl._create_unverified_contextresponse = urllib.request.urlopen(request)data = response.read().decode('utf-8')return datadata_homepage = get_response(sec_vul_domain)
soup = BeautifulSoup(data_homepage, features="lxml")
tag1 = soup.find_all(name='a')
for item in tag1:if "安全漏洞" in item:# 通过获取标签属性,即使站点结构发生变化也能拿到漏洞页面的链接attrs = item.attrsvul_dict = attrs.copy()
sec_vul_homepage = vul_dict.get('href')# 同一天的爆出的漏洞个数可能要占用好几个页面,需指定被扫描网站需要扫描的网页数范围,默认读取10页
for i in range(10):sec_vul_pageNoUrl = sec_vul_homepage +"&type_id=&os=&keyword=&page=%s" % (i+1)data_sec_vul = get_response(sec_vul_pageNoUrl)if today in data_sec_vul:str_re = "<span>"+today+"</span>.*"res = re.findall(str_re,data_sec_vul)for item in res:data_str += item + '\n'sec_vul_soup = BeautifulSoup(data_str, features="lxml")tag_a = sec_vul_soup.find_all(name='a')for item in tag_a:# 生成列表用于收集单独的漏洞信息sec_sub_list = []# 收集漏洞标题: titlesec_sub_title = item.stringsec_sub_list.append(sec_sub_title)# 收集漏洞url: sec_sub_urlitem = str(item)sub_url = re.findall("vulndb/\d+",item)sec_sub_url = sec_vul_domain + sub_url[0]sec_sub_list.append(sec_sub_url)# 收集漏洞受影响的版本: aff_verdata_sec_vul_cve = get_response(sec_sub_url)affected_version = re.findall("<blockquote>.*</blockquote>", data_sec_vul_cve, re.S)affected_version = str(affected_version[0][12:-13])affected_version = affected_version.replace("<br />", "")affected_version = affected_version.replace("&gt;",">")affected_version = affected_version.replace("&lt;","<")aff_ver = affected_version.replace("</blockquote><b>不受影响系统:</b><blockquote>","\n不受影响版本:\n")sec_sub_list.append(aff_ver)if sec_sub_list not in sec_all_list:sec_all_list.append(sec_sub_list)# ---------------------------------------------
# 【2】信息筛选
# ---------------------------------------------# 各系统漏洞在筛选后最终会保存至各自msg_***变量中,
# >>>添加新监控系统时需相应添加以下记录<<<
msg_cisco = ">>> CISCO安全通告\n"
msg_apache = "\n>>> APACHE安全通告\n"# 调用sub_sec_info方法,将漏洞信息格式化输出
def sub_sec_info():global countcount += 1sec_info = "\n漏洞名称:" + line[0] \+ "\n漏洞链接:" + line[1] \+ "\n受影响的系统:\n" + line[2] + '\n'return sec_info# 调用get_sec_info函数,将目标系统或应用名称作为参数传入,即可获取相关爬虫告警信息
def get_sec_info(vul):vul = vul.capitalize()global msg_ciscoglobal msg_apache# >>>添加新监控系统时需相应添加以下elif记录<<<if vul in line[0]:if "Cisco" in vul:msg_cisco += sub_sec_info()elif "Apache" in vul:msg_apache += sub_sec_info()# 漏洞信息筛选入口函数
for line in sec_all_list:for sys in system_list:get_sec_info(sys)# >>>添加新监控系统时需相应添加以下记录<<<
all_vul_msg += msg_cisco
all_vul_msg += msg_apache
all_vul_msg += "\n漏洞总数:【"+str(count)+""# 为放置数据丢失,同时将筛选后的爬虫信息写入文本f中,f指向secInfo-lvmeng.txt文档。
f.writelines(all_vul_msg)
#print(msg)# ---------------------------------------------
# 【3】信息发送
# ---------------------------------------------# 配制收发邮件客户端
chst = email.charset.Charset(input_charset = 'utf-8')
header = ("From: %s\nTo: %s\nSubject: %s\n\n" %("from_mail@163.com","to_mail@163.com",chst.header_encode("[爬虫安全通告-绿盟]")))#借用163smtp服务器发送邮件,将上面读到的报警信息(all_vul_msg)作为邮件正文发送。
email_con = header.encode('utf-8') + all_vul_msg.encode('utf-8')
smtp = smtplib.SMTP("smtp.163.com")
smtp.login("from_mail@163.com","from_mail_pass")
smtp.sendmail('from_mail@163.com','to_mail@163.com',email_con)
print('mail send success!')
smtp.quit()

邮件截图:

转载于:https://www.cnblogs.com/tdcqma/p/7662988.html

这篇关于crawler_exa4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478193

相关文章

转:cygwin简单应用及Nutch之Crawler工作流程

cygwin简单应用: cygwin home 目录: ls /                       -- 根目录 ls /cygdrive               -- 查看本地操作系统的盘符,如c盘、d盘 pwd                       -- 当前位置路径 /home/zf

Elasticsearch:Open Crawler 发布技术预览版

作者:来自 Elastic Navarone Feekery 多年来,Elastic 已经经历了几次 Crawler 迭代。最初是 Swiftype 的 Site Search,后来发展成为 App Search Crawler,最近又发展成为 Elastic Crawler。这些 Crawler 功能丰富,允许以稳健而细致的方式将网站数据导入 Elasticsearch。但是,如果用户想在

爬虫自动调用shell通过脚本运行scrapy爬虫(crawler API)

一、爬虫时如何同时调用shell 1)终端cd项目>>scrapy crawl example 2)打开example.py import scrapyfrom scrapy.shell import inspect_response#引入shellclass ExampleSpider(scrapy.Spider):name = "example"allowed_domains = ["

ML-Agents案例之Crawler

本案例源自ML-Agents官方的示例,Github地址:https://github.com/Unity-Technologies/ml-agents 本文基于我前面发的两篇文章,需要对ML-Agents有一定的了解,详情请见:Unity强化学习之ML-Agents的使用、ML-Agents命令及配置大全。 参考资料:ML-Agents(十)Crawler 上一次运行的3DBall的任务比

爬虫工作量由小到大的思维转变---<第六十九章 > Scrapy.crawler模块中的异常

前言: 继续上一章: 爬虫工作量由小到大的思维转变---<第六十八章 > scrapy.utils模块中的异常-CSDN博客         Scrapy.crawler模块是Scrapy框架的核心之一,它负责管理和控制整个爬虫的生命周期。该模块提供了各种工具和功能,以便开发者可以配置和运行爬虫、处理请求和响应、解析数据以及生成输出等。它是构建Scrapy爬虫的基础,为高效地执行爬虫任务提

爬虫(Web Crawler)逆向技术探索

实战案例分析 为了更好地理解爬虫逆向的实际应用,我们以一个具体的案例进行分析。 案例背景 假设我们需要从某电商网站上获取商品价格信息,但该网站采取了反爬虫措施,包括动态Token和用户行为分析等。 分析与挑战 动态Token:该网站在每次请求中都会生成一个动态的Token,用于验证用户身份和请求合法性。这意味着简单地发送请求无法成功获取数据。 用户行为分析:网站可能会监控用户的访问行为,

爬虫(Web Crawler)介绍与应用

## 摘要 本文将介绍什么是爬虫(Web Crawler)以及其在信息抓取、数据分析等领域的应用。我们将深入探讨爬虫的工作原理、设计特点以及开发过程中需要考虑的关键问题。 ## 一、什么是爬虫 爬虫是一种自动化程序或脚本,用于从互联网上抓取信息并进行处理。它通过访问网页、解析内容、提取信息等方式,实现数据的自动化收集和处理。 ## 二、爬虫的工作原理 1. **URL收集与调度**:爬虫

CHAPTER 9: 《DESIGN A WEB CRAWLER》第9章 《设计一个web爬虫》

CHAPTER 9: 《DESIGN A WEB CRAWLER》第九章 设计一个web爬虫 在本章中,我们将重点介绍网络爬虫设计:一种有趣而经典的系统设计 面试问题。 网络爬虫被称为机器人或蜘蛛。它被搜索引擎广泛用于发现网络上的新内容或更新内容。内容可以是网页、图像、视频、PDF文档等。网络爬虫首先收集一些网页,然后跟踪这些网页上的链接页面以收集新内容。图 9-1 显示了爬网过程的直观示例。

Become.com的 Web Crawler: 一个超大规模的Java应用程序(想开发自己的搜索引擎增值服务的必读)

原文地址:http://java.sun.com/developer/technicalArticles/WebServices/become/?feed=JSC 1 Become.com准备开发他们的第二代搜索引擎。他们曾经花了一年的时间开发了一个C++版本的web crawler ,但是有明显的内存和线程问题。 2 现在他们决定用java重新开发这个引擎。两个开发者,花了3个月,就构建

Python游戏开发之Dungeon Crawler 游戏源码大全

源码一 功能: WASD 移动 SPACE 攻击 SHIFT 使用楼梯 介绍 每个级别都包含一把钥匙和一个上锁的舱口。收集钥匙以解锁通往下一层的通道(SHIFT解锁)。 史莱姆造成的伤害最小,但每一层都会产生更多。他们可以降低健康或 XP。更多 XP = 每次攻击造成更多伤害。硬币目前没有用。 水平是无限的和持久的。唯一的限制是您的 RAM。世界在死亡时重置。 运行方式 pytho