热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

『Python』爬取WooYun论坛所有漏洞条目的相关信息

每个漏洞条目包含:乌云ID,漏洞标题,漏洞所属厂商,白帽子,漏洞类型,厂商或平台给的Rank值主要是做数据分析使用:可以分析某厂商的各类型漏洞的统计;或者对白帽子的能力进行分析..

每个漏洞条目包含:

乌云ID,漏洞标题,漏洞所属厂商,白帽子,漏洞类型,厂商或平台给的Rank值

主要是做数据分析使用:
可以分析某厂商的各类型漏洞的统计;
或者对白帽子的能力进行分析.....

数据更新时间:2016/5/27
漏洞条目:104796条

数据截图如下:

技术分享

数据网盘链接:

链接:http://pan.baidu.com/s/1bpDNKOv 密码:6y57

爬虫脚本:

# coding:utf-8
# author: anka9080
# version: 1.0  py3

import sys,re,time,socket
from requests import get
from queue import Queue, Empty
from threading import Thread

# 全局变量
COUNT = 1
START_URL = ‘http://wooyun.org/bugs‘
ID_DETAILS = []
ALL_ID = []
Failed_ID = []
PROXIES = []

HEADERS = {
	"Accept": "text/html,application/xhtml+xml,application/xml,application/json;q=0.9,image/webp,*/*;q=0.8",
	"Accept-Encoding": "gzip, deflate, sdch",
	"Accept-Language": "zh-CN,zh;q=0.8",
	"Cache-Control": "max-age=0",
	"Connection": "keep-alive",
	"DNT": "1",
	"Host": "wooyun.org",
	"Upgrade-Insecure-Requests": "1",
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2716.0 Safari/537.36"
}

class WooYunSpider(Thread):
	"""docstring for WooYunSpider"""
	def __init__(self,queue):
		Thread.__init__(self)
		self.pattern1 = re.compile(r‘title>(.*?)\| WooYun.*?keywords" cOntent="(.*?),(.*?),(.*?),wooyun‘,re.S)  # 匹配模式在 compile 的时候指定
		self.pattern2 = re.compile(r"漏洞Rank:(\d{1,3})")
		self.queue = queue
		self.start() # 执行 run()

	def run(self):
		"每次读取 queue 的一条"
		global COUNT,RES_LOG,ERR_LOG
		while(1):
			try:
				id = self.queue.get(block = False)
				r = get(‘http://wooyun.org/bugs/‘ + id,headers = HEADERS)
				html = r.text
			except Empty:
				break
			except Exception as e:
				msg = ‘[ - Socket_Excpt ] 链接被拒绝,再次添加到队列:‘ + id
				print(msg)
				ERR_LOG.write(msg+‘\n‘)
				self.queue.put(id)  # 访问失败则把这个 URL从新加入队列
			else:
				title,comp,author,bug_type,rank = self.get_detail(html,id)
				detail = id+‘----‘+title+‘----‘+comp+‘----‘+author+‘----‘+bug_type+‘----‘+rank
				try: # 写入文件可能会诱发 gbk 编码异常,这里保存 id 到 failed
					RES_LOG.write(detail + ‘\n‘)
				except Exception as e:
					Failed_ID.append(id)
					msg = ‘[ - Encode_Excpt ] 字符编码异常:‘ + id
					print(msg)
					ERR_LOG.write(msg+‘\n‘)
				ID_DETAILS.append(detail)
			# time.sleep(1)

			print(‘[ - info ] id: {}  count: {}  time: {:.2f}s‘.format(id,COUNT,time.time() - start))
			COUNT += 1

	# 由 缺陷编号 获得对应的 厂商 和 漏洞类型信息
	def get_detail(self,html,id):
		global ERR_LOG
		try:
			# print(html)
			res = self.pattern1.search(html)
			title = res.group(1).strip()
			comp = res.group(2).strip()
			author = res.group(3).strip()
			bug_type = res.group(4).strip()
		except Exception as e:
			msg = ‘[ - Detail_Excpt ] 未解析出 标题等相关信息:‘ + id
			print(msg)
			ERR_LOG.write(msg+‘\n‘)
			Failed_ID.append(id)
			title,comp,author,bug_type,rank = ‘Null‘,‘Null‘,‘Null‘,‘Null‘,‘Null‘
		else:
			try:
				res2 = self.pattern2.search(html)  # 若厂商暂无回应则 rank 为 Null
				rank = res2.group(1).strip()
			except Exception as e:
				msg = ‘[ - Rank_Excpt ] 未解析出 Rank:‘ + id
				print(msg)
				ERR_LOG.write(msg+‘\n‘)
				rank = ‘Null‘
			
		finally:
			try:
				print (title,comp,author,bug_type,rank)
			except Exception as e:
				msg = ‘[ - Print_Excpt ] 字符编码异常:‘ + id +‘::‘+ str(e)
				print(msg)
				ERR_LOG.write(msg+‘\n‘)
			return title,comp,author,bug_type,rank




class ThreadPool(object):
	def __init__(self,thread_num,id_file):
		self.queue = Queue() # 需要执行的队列
		self.threads = [] # 多线程列表
		self.add_task(id_file)
		self.init_threads(thread_num)
		

	def add_task(self,id_file):
		with open(id_file) as input:
			for id in input.readlines():
				self.queue.put(id.strip())			

	def init_threads(self,thread_num):
		for i in range(thread_num):
			print (‘[ - info :] loading threading ---> ‘,i)
			# time.sleep(1)
			self.threads.append(WooYunSpider(self.queue)) # threads 列表装的是 爬虫线程

	def wait(self):
		for t in self.threads:
			if t.isAlive():
				t.join()


def test():
	url = ‘http://wooyun.org/bugs/wooyun-2016-0177647‘
	r = get(url,headers = HEADERS)
	html = r.text
	# print type(html)
	# keywords" cOntent="(.*?),(.*?),(.*?),wooyun  ====> 厂商,白帽子,类型
	pattern1 = re.compile(r‘title>(.*?)\| WooYun‘)
	pattern2 = re.compile(r‘keywords" cOntent="(.*?),(.*?),(.*?),wooyun‘)
	pattern3 = re.compile(r‘漏洞Rank:(\d{1,3})‘)
	for x in range(500):
		res = pattern1.search(html)
		# print (res.group(1))
		res = pattern2.search(html)
		# print (res.group(1),res.group(2),res.group(3))
		res = pattern3.search(html)
		# print (res.group(1))
		x += 1
		print(x)
	# rank = res.group(4).strip()

	# print html

def test2():
	url = ‘http://wooyun.org/bugs/wooyun-2016-0177647‘
	r = get(url,headers = HEADERS)
	html = r.text
	pattern = re.compile(r‘title>(.*?)\| WooYun.*?keywords" cOntent="(.*?),(.*?),(.*?),wooyun.*?漏洞Rank:(\d{1,3})‘,re.S)
	for x in range(500):
		res = pattern.search(html)
		# print (res.group(1),res.group(2),res.group(3),res.group(4),res.group(5))
		x += 1
		print(x)
# 保存结果
def save2file(filename,filename_failed_id):
	with open(filename,‘w‘) as output:
		for item in ID_DETAILS:
			try: # 写入文件可能会诱发 gbk 编码异常,这里忽略
				output.write(item + ‘\n‘)
			except Exception as e:
				pass
			
	with open(filename_failed_id,‘w‘) as output:
		output.write(‘\n‘.join(Failed_ID))

if __name__ == ‘__main__‘:

	socket.setdefaulttimeout(1)
	start = time.time()

	# test()

	# 日志记录
	ERR_LOG = open(‘err_log.txt‘,‘w‘)
	RES_LOG = open(‘res_log.txt‘,‘w‘)
	id_file = ‘id_0526.txt‘
	# id_file = ‘id_test.txt‘
	tp = ThreadPool(20,id_file)
	tp.wait()

	save2file(‘id_details.txt‘,‘failed_id.txt‘)

	end = time.time()
	print (‘[ - info ] cost time :{:.2f}s‘.format(end - start))

『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息


推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
author-avatar
嘛道理
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有