安全测试工具,自动发现网站所有URL!

作为一个安全测试人员来说,首先要拿到网站所有url,然后根据拿到的url进行渗透测试进行漏洞挖掘。本文给大家介绍的是如何拿到一个网站所有的url。

深度爬取层级控制

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

整体架构图

相信大家对深度控制和架构已经有基本了解,剩下的代码大家直接来看。非常易懂,不妨来试试。(下一次来给大家说一下代理池的创建,让你的Spider不被封)、

from lxml import html
import requests
import re
import pymysqlfrom search_ip import search_ip
###############代理###########def get_proxy():return requests.get("http://127.0.0.1:5010/get/").contentdef delete_proxy(proxy):requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))def html_prase(url):r = requests.get(url).contentreturn html.fromstring(r)def url_is_correct():'''使用requests.get方法判断url是否正确,并返回url:return:'''url = "https://www.wuage.com" #网站入口requests.get(url)return urlurl = url_is_correct()   #将验证为正确的url地址赋值给urldef url_protocol(url):'''获取输入的url地址的协议,是http、https等'''print('该站使用的协议是:' + re.findall(r'.*(?=://)',url)[0])return re.findall(r'.*(?=://)',url)[0]urlprotocol = url_protocol(url)def same_url(url):'''处理输入的url,判断是否为同一站点做准备,爬取的时候不能爬到其它站'''#将完整的url中的http://删除url = url.replace(urlprotocol + '://','')if re.findall(r'^www',url) == []:sameurl = 'www.' + urlif sameurl.find('/') != -1:sameurl = re.findall(r'(?<=www.).*?(?=/)', sameurl)[0]else:sameurl = sameurl + '/'sameurl = re.findall(r'(?<=www.).*?(?=/)', sameurl)[0]else:if url.find('/') != -1:sameurl = re.findall(r'(?<=www.).*?(?=/)', url)[0]else:sameurl = url + '/'sameurl = re.findall(r'(?<=www.).*?(?=/)', sameurl)[0]#print('同站域名地址:' + sameurl)return sameurldomain_url = url'''
处理url的类,对已访问过的和未访问过的进行记录,待后续使用
'''
class linkQuence:def __init__(self):self.visited = []    #已访问过的url初始化列表self.unvisited = []  #未访问过的url初始化列表def getVisitedUrl(self):  #获取已访问过的urlreturn self.visiteddef getUnvisitedUrl(self):  #获取未访问过的urlreturn self.unvisiteddef addVisitedUrl(self,url):  #添加已访问过的urlreturn self.visited.append(url)def addUnvisitedUrl(self,url):   #添加未访问过的urlif url != '' and url not in self.visited and url not in self.unvisited:return self.unvisited.insert(0,url)def removeVisited(self,url):return self.visited.remove(url)def popUnvisitedUrl(self):    #从未访问过的url中取出一个urltry:                      #pop动作会报错终止操作,所以需要使用try进行异常处理return self.unvisited.pop()except:return Nonedef unvisitedUrlEmpty(self):   #判断未访问过列表是不是为空return len(self.unvisited)class Spider():'''爬取程序'''def __init__(self,url):self.linkQuence = linkQuence()   #引入linkQuence类self.linkQuence.addUnvisitedUrl(url)   #并将需要爬取的url添加进linkQuence对列中self.current_deepth = 1    #设置爬取的深度def getPageLinks(self,url):'''获取页面中的所有链接'''sel = html_prase(url)pageLinks = sel.xpath('//a/@href')return pageLinksdef processUrl(self,url):'''处理相对路径为正确的完整url'''true_url = []for l in self.getPageLinks(url):if re.findall(r'//',l):if re.findall('https://',l) or re.findall('http://',l):true_url.append(l)elif not re.findall('@',l):#true_url.append(urlprotocol + '://' + domain_url + l)true_url.append(urlprotocol+':' + l)# for l in true_url:#     print(l)return true_urldef sameTargetUrl(self,url):'''判断是否为同一站点链接,防止爬出站外。'''same_target_url = []for l in self.processUrl(url):if re.findall(domain_url,l):same_target_url.append(l)#print(self.same_target_url)return same_target_urldef unrepectUrl(self,url):'''删除重复url,排除指定域名'''unrepect_url = []expect_domain = ['s.wuage.com','static.wuage.com','shop.wuage.com','img.wuage.com','medici.wuage.com','buyer.wuage.com','item.wuage.com']for l in self.sameTargetUrl(url):if l not in unrepect_url and l.split('//')[1].split('/')[0] not in expect_domain:unrepect_url.append(l)return unrepect_urldef crawler(self,crawl_deepth=1):'''依据深度进行爬取层级控制'''#while self.current_deepth <= crawl_deepth:while self.current_deepth <= crawl_deepth:visitedUrl = self.linkQuence.popUnvisitedUrl()if visitedUrl is None or visitedUrl == '':continueself.getPageLinks(visitedUrl)links = self.unrepectUrl(visitedUrl)self.linkQuence.addVisitedUrl(visitedUrl)for link in links:sel_link = html_prase(link)print(link)self.linkQuence.addUnvisitedUrl(link)self.current_deepth += 1return self.linkQuence.visitedif __name__ == '__main__':spider = Spider(url)spider.crawler(3)

作者:胡歌,互联网公司运维技术负责人,拥有10年的互联网开发和运维经验。一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拷贝构造函数:对象复制的重要工具

拷贝构造函数 功能&#xff1a; 使用一个已经存在的对象来初始化一个新的同一类型的对象。 声明&#xff1a; 只有一个参数并且参数为该类对象的引用 如果类中没有说明拷贝构造函数&#xff0c;则系统会自动生成一个缺省复制构造函数&#xff0c;作为该类的公有成员。 当函数…

ospf选路

问题描述 R6通过主备份路径访问LSP&#xff08;R1&#xff09;&#xff0c;主为R2&#xff0c; 备为R3 解决方案 路由器1看作LSP&#xff0c;配置loopback 0 ,地址为1.1.1.1 供测试使用&#xff1b;路由器 236, LSW4和LSW5&#xff0c; 运行ospf处于相同区域&#xff0c;建立…

<JavaEE> 经典设计模式之 -- 定时器

目录 一、定时器的概念 二、Java 标准库中的定时器 三、实现自己的定时器 一、定时器的概念 什么是定时器&#xff1f;定时器是软件开发中的一个常用且重要组件&#xff0c;作用是在达到设定时间后&#xff0c;执行指定的代码。 二、Java 标准库中的定时器 1&#xff09;T…

Redis核心知识点总结

1.Redis介绍 Redis 是 NoSQL&#xff0c;但是可处理 1 秒 10w 的并发&#xff08;数据都在内存中&#xff09; 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql&#xff0c;有各类实现他的实现类&#xff0c;我们常用的是 druid 其中对 redis&#xff0c;我们通常用 J…

C语言 if语句有无(;)分号问题

在C语言中&#xff0c;if语句后面不带分号&#xff08;;&#xff09;的情况有两种主要形式&#xff1a; 1. 带有大括号的代码块&#xff1a;如果if语句后面跟随一个由大括号&#xff08;{}&#xff09;包围的代码块&#xff0c;那么这个代码块中的语句只有在if条件为真时才会执…

【C语言】7-38 吉老师的回归 分数 15

7-38 吉老师的回归 分数 15 全屏浏览题目 切换布局 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦&#xff01; 为了简化题目&#xff0c;我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的…

分类与群组:解析分类和聚类分析技术

目录 写在开头1. 数据分类与聚类简介1.1 分类分析1.2 聚类分析1.3 对比分析2. 如何学习分类和聚类分析技术2.1 学习理论知识2.1.1 数学知识2.1.2 编程基础2.1.3 深入学习算法2.1.3.1 分类算法学习举例2.1.3.2 聚类算法学习举例2.1.4 参与实战2.2 应用成功案例2.2.1 分类算法成功…

16、XSS——会话管理

文章目录 一、web会话管理概述1.1 会话管理1.2 为什么需要会话管理&#xff1f;1.3 常见的web应用会话管理的方式 二、会话管理方式2.1 基于server端的session的管理方式2.2 cookie-based的管理方式2.3 token-based的管理方式 三、安全问题 一、web会话管理概述 1.1 会话管理 …

加速度jsudo:IC商城系统4.0版正式发布 PCB计价电子元器件商城

近日&#xff0c;在加速度软件新品会发布会上&#xff0c;Mike正式公布了其4.0版本的电子元器件商城系统&#xff0c;展示了迭代后的强大新功能。在招募了数十家元器件销售、运营和老板测试体验后&#xff0c;获得了大家一致的好评。其中&#xff0c;中国电子南京某子公司董事长…

VMware虚拟机系统CentOS镜像的下载

文章目录 阿里云下载官网下载参考文档 一些小版本可能过时或者其他原因已经不能存在了&#xff0c;只有大版本号最新的&#xff0c;或者其他最新版本 阿里云下载 1-百度搜索&#xff1a;阿里云 2-找到开发者社区 3-找到下载&#xff0c;选择镜像 4-选择系统 5-点击镜像地…

vivado时序方法检查3

TIMING-7 &#xff1a; 相关时钟间无公共节点 时钟 <clock_name> 与 <clock_name> 之间相互关联 &#xff08; 一起定时 &#xff09;&#xff0c; 但两者间无公共节点。此设置在硬件中可能失败。要查找这些时钟之间的时序路径&#xff0c; 请运行以下命令 &a…

javascript 访问器属性创建的三种方式

出自 javascript高级程序设计-第六章6.1节 javascript 访问器属性创建的三种方式&#xff1a; 以下year字段都是访问器属性&#xff0c;_year、 edition是数据属性。 var book1 { _year: 2000, edition: 1 }; Object.defineProperty(book1, "year", { get: fun…

岚图追光PHEV 25.28万元起售,开卷混动豪华轿车

作者&#xff5c;Amy 编辑&#xff5c;德新 12月5日晚&#xff0c;2023岚图科技日上&#xff0c;岚图汽车正式发布了其新一代SOA电子电气架构天元架构&#xff0c;并宣布了以“新行政电动旗舰”为定位的岚图追光PHEV正式上市。 岚图追光PHEV是岚图汽车旗下首款电混轿车&#x…

selenium自动化测试:xpath八种定位方式!

01、前言 如果可以的话&#xff0c;请先关注&#xff08;专栏和账号&#xff09;&#xff0c;然后点赞和收藏&#xff0c;最后学习和进步。你的支持是我继续写下去的最大动力&#xff0c;个人定当倾囊而送&#xff0c;不负众望。谢谢&#xff01;&#xff01;&#xff01; 1.…

【springboot】整合redis和定制化

1.前提条件:docker安装好了redis,确定redis可以访问 可选软件: 2.测试代码 (1)redis依赖 org.springframework.boot spring-boot-starter-data-redis (2)配置redis &#xff08;3&#xff09; 注入 Resource StringRedisTemplate stringRedisTemplate; 这里如果用Autowi…

一台服务器能放多少个网站?

这个问题有点意思&#xff0c;确实是有不少用户会问到&#xff0c;但其实这个问题的真正意思是&#xff0c;一台服务器上面放多少个网站不卡&#xff0c;打开不慢 。其实这个问题又有点复杂&#xff0c;一台服务器放多少个网站不会卡&#xff0c;跟很多因素有关&#xff0c;比如…

docker安装及简单使用(Linux版本)

文章目录 前言一、docker安装二、docker命令pull&#xff08;安装镜像&#xff09;images&#xff08;查看镜像&#xff09;run&#xff08;创建容器&#xff09;删除容器exec&#xff08;进入运行中的容器&#xff09;常用命令 总结如有启发&#xff0c;可点赞收藏哟~ 前言 ht…

Python 进阶(十三):JSON 序列化和反序列化(json 模块)

大家好&#xff0c;我是水滴~~ 本篇文章主要介绍json模块的功能&#xff0c;包括将Python对象序列化到文件、将Python对象序列化为字符串、序列化时类型的对照表、将文件中JSON数据反序列化为Python对象&#xff0c;将JSON字符串反序列化为Python对象、反序列化时类型的对照表…

Python 模块的使用方法

Python 模块是一种组织和封装代码的方式&#xff0c;允许你将相关的功能和变量放在一个单独的文件中&#xff0c;以便在其他程序中重复使用。在Python中&#xff0c;模块是一种可执行的Python脚本&#xff0c;其文件扩展名为 .py。这里&#xff0c;我将详细讲解Python模块的使用…

2023中医药国际传承传播大会在深圳召开

12月2日&#xff0c;2023中医药国际传承传播大会在深圳召开&#xff0c;大会由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会主办&#xff0c;世界针灸学会联合会健康传播工作委员会、中新雅视文化发展有限公司公司与深圳巨邦传媒集…