python爬虫_自动获取seebug的poc实例


Posted in Python onAugust 05, 2017

简单的写了一个爬取www.seebug.org上poc的小玩意儿~

首先我们进行一定的抓包分析

我们遇到的第一个问题就是seebug需要登录才能进行下载,这个很好处理,只需要抓取返回值200的页面,将我们的headers信息复制下来就行了

(这里我就不放上我的headers信息了,不过headers里需要修改和注意的内容会在下文讲清楚)

headers = {
 'Host':******,
 'Connection':'close',
 'Accept':******,
 'User-Agent':******,
 'Referer':'https://www.seebug.org/vuldb/ssvid-',
 'Accept-Language':'zh-CN,zh;q=0.8',
 'Cookie':***********
}

由上所知,我们的中点就是referer这一项,是我们后面要进行修改的

那么怎么去修改这个呢?

我先进行点击下载链接抓包发现,seebug的poc下载链接特别的整齐:

'https://www.seebug.org/vuldb/downloadPoc/xxxxx',

后面只需要加上一个五位数就行,而且五位数是连号的哦!

这就一目了然,我更改了五位数再次进行请求时发现,并没有返回美丽的200状态码,瞄了一眼header,发现了referer这一项:

'Referer':'https://www.seebug.org/vuldb/ssvid-xxxxx'

也就是说referer这一项的五位数字也要随之变化,这样我们的get请求头部就完成了

接下来是线程的问题

使用了queue和threading进行多线程处理,发现我们不能图快,不然会被反爬虫发现

于是导入time增加time.sleep(1),能有一秒的休眠就行了,线程数给了2个(这样看来好像线程的意义并不大,不过也就这么写啦)

# coding=utf-8

import requests
import threading
import Queueimport time 

headers = {
   ******
  }
url_download = 'https://www.seebug.org/vuldb/downloadPoc/'

class SeeBugPoc(threading.Thread):
 def __init__(self,queue):
  threading.Thread.__init__(self)
  self._queue = queue

 def run(self):
  while not self._queue.empty():
   url_download = self._queue.get_nowait()
   self.download_file(url_download)


 def download_file(self,url_download):
  r = requests.get(url = url_download,headers = headers)
  print r.status_code
  name = url_download.split('/')[-1]
  print name 
  if r.status_code == 200:
   f = open('E:/poc/'+name+'.txt','w')
   f.write(r.content)
   f.close()
   print 'it ok!'
  else:
   print 'what fuck !'
  time.sleep(1)
'''
 def get_html(self,url):

  r = requests.get(url = url,headers = headers)
  print r.status_code
  print time.time()
'''


def main():
 queue = Queue.Queue()
 for i in range(93000,93236):
  headers['Referer'] = 'https://www.seebug.org/vuldb/ssvid-'+str(i)
  queue.put('https://www.seebug.org/vuldb/downloadPoc/'+str(i))


  #queue用来存放设计好的url,将他们放入一个队列中,以便后面取用

 threads = []
 thread_count = 2
 for i in range(thread_count):
  threads.append(SeeBugPoc(queue))

 for i in threads:
  i.start()

 for i in threads:
  i.join()

if __name__ == '__main__':
 main()

代码如上

控制下载的range()中的两个五位数,大家只要去seebug库中找一找想要扫描的库的开头和结尾编码的五位数就行了(也就是他们的编号)

关于返回的状态码,如果项目不提供poc下载、poc下载不存在、poc需要兑换币才能下载,就不能够返回正常的200啦(非正常:404/403/521等)

当然,如果一直出现521,可以考虑刷新网页重新获取header并修改代码

最后进行一个状态码的判断,并且将200的文件写出来就好了
 

表示惭愧感觉自己写的很简单

如果大家发现错误或者有疑惑可以留言讨论哦

以上这篇python爬虫_自动获取seebug的poc实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Python中的pack和unpack的使用
Mar 12 Python
python中pika模块问题的深入探究
Oct 13 Python
python实现合并两个排序的链表
Mar 03 Python
python中metaclass原理与用法详解
Jun 25 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
python 修改本地网络配置的方法
Aug 14 Python
python 多进程队列数据处理详解
Dec 23 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
python中的break、continue、exit()、pass全面解析
Aug 05 #Python
Python基于递归算法实现的走迷宫问题
Aug 04 #Python
Python实现的科学计算器功能示例
Aug 04 #Python
Python中用字符串调用函数或方法示例代码
Aug 04 #Python
Python编程实现的图片识别功能示例
Aug 03 #Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 #Python
详解 Python中LEGB和闭包及装饰器
Aug 03 #Python
You might like
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Python常用的json标准库
2019/02/19 Python
基于python实现查询ip地址来源
2020/06/02 Python
python实现在线翻译
2020/06/18 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
市场部专员岗位职责
2013/11/30 职场文书
个人授权委托书
2014/04/03 职场文书
班级活动总结格式
2014/08/30 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
教你怎么用Python生成九宫格照片
2021/05/20 Python
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL