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

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

深度爬取层级控制

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

整体架构图

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

from lxml import html
import requests
import re
import pymysql

from search_ip import search_ip
###############代理###########

def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").content

def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

def html_prase(url):
    r = requests.get(url).content
    return html.fromstring(r)



def url_is_correct():
    '''
    使用requests.get方法判断url是否正确,并返回url
    :return:
    '''
    url = "https://www.wuage.com" #网站入口
    requests.get(url)
    return url

url = url_is_correct()   #将验证为正确的url地址赋值给url

def 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.' + url
        if 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 sameurl

domain_url = url



'''
处理url的类,对已访问过的和未访问过的进行记录,待后续使用
'''
class linkQuence:
    def __init__(self):
        self.visited = []    #已访问过的url初始化列表
        self.unvisited = []  #未访问过的url初始化列表

    def getVisitedUrl(self):  #获取已访问过的url
        return self.visited
    def getUnvisitedUrl(self):  #获取未访问过的url
        return self.unvisited
    def addVisitedUrl(self,url):  #添加已访问过的url
        return self.visited.append(url)
    def addUnvisitedUrl(self,url):   #添加未访问过的url
        if 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中取出一个url
        try:                      #pop动作会报错终止操作,所以需要使用try进行异常处理
            return self.unvisited.pop()
        except:
            return None
    def 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 pageLinks
    def 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_url

    def 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_url

    def 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_url

    def 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 == '':
                continue
            self.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 += 1

        return self.linkQuence.visited


if __name__ == '__main__':
    spider = Spider(url)
    spider.crawler(3)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】

集成开发环境PyCharm的安装【侯小啾python基础领航计划 系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

图灵测试:人工智能的终极挑战

图灵测试&#xff1a;人工智能的终极挑战 一、引言 在人工智能的发展历程中&#xff0c;图灵测试一直被视为一个重要的里程碑。这个由英国计算机科学家艾伦图灵提出的实验&#xff0c;旨在评估人工智能是否能够像人一样思考和表达&#xff0c;为人类与机器智能之间的界限设立了…

Python实现FA萤火虫优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

【征稿倒计时十天,ACM独立出版,有确定的ISBN号,ei检索稳且快】

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff09; 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff0…

C语言给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)

这个题目要求的输出是一串数字&#xff01;&#xff01;&#xff01; 不是下面&#xff1a;输入在一行中给出 10 个非负整数&#xff0c;顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50&#xff0c;且至少拥有 1 个非…

使用Jmeter进行http接口测试怎么做?

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接…

Lidar-SLAM的历史与现状

文章&#xff1a;LiDAR-based SLAM for robotic mapping: state of the art and new frontiers 作者&#xff1a;Xiangdi Yue and Miaolei He 编辑&#xff1a;点云PCL 欢迎各位加入知识星球&#xff0c;获取PDF论文&#xff0c;欢迎转发朋友圈。文章仅做学术分享&#xff0c…

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

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

Selenium 中并行测试的重要性!

随着技术的进步&#xff0c;测试解决方案变得更具可扩展性&#xff0c;加速了团队从手动测试到Selenium测试自动化的转型。但是成年人的世界&#xff0c;没有什么是容易的。对于许多团队来说&#xff0c;并行运行多个测试仍然是不可扩展的。他们倾向于遵循传统的顺序执行测试方…

kubeadm快速搭建k8s高可用集群

1.安装及优化 1.1基本环境配置 1.环境介绍 &#xff08;1&#xff09;.高可用集群规划 主机名ip地址说明k8s-master01192.168.2.96master节点k8s-master02192.168.2.97master节点k8s-master03192.168.2.98master节点k8s-node01192.168.2.99node节点k8s-node02192.168.2.100n…

大师学SwiftUI第18章Part3 - 自定义视频播放器

视频 录制和播放视频对用户来说和拍照、显示图片一样重要。和图片一样&#xff0c;Apple框架中内置了播放视频和创建自定义播放器的工具。 视频播放器 SwiftUI定义了​​VideoPlayer​​视图用于播放视频。该视图提供了所有用于播放、停止、前进和后退的控件。视图包含如下初…

SM37 Cancel Logon of user DDIC in client 200 failed when starting a step

一、前言 在执行MDGIMG 调整了模型的映射的时候&#xff0c;需要在同一个环境的 不同Client分别创建一个SM37的后台Job&#xff0c;我在执行NWBC的时候报错&#xff0c;发现MDG创建物料的流程用不了&#xff0c;发现是SM37的Job被取消了&#xff0c;报错是 Logon of user DDI…

保安工程服务公司【荣志集团】申请718万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于香港的保安工程服务公司荣志集团控股有限公司&#xff08;SU Group Holdings Ltd&#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达…

12 月版的 Java Annotated Monthly

本心、输入输出、结果 文章目录 12 月版的 Java Annotated Monthly前言Java 新闻使用 Gatherers 实现更好的 Java 流 – Inside Java Newscast #57Java 21 的新功能GPU 上的 Java 以下是本月针对 JDK 22 的新 JEP 候选者和 JEP 列表Java 教程和技巧框架、库相关花有重开日&…

2023五岳杯量子计算挑战赛APMCM亚太地区

问题一要求在特定区域内部署两个边缘服务器&#xff0c;以便根据计算需求分布覆盖最大的计算需求。每个边缘服务器都有一个覆盖半径为1。目标是确定两个边缘服务器的位置&#xff0c;以覆盖最大的计算需求。假设边缘服务器的位置位于网格的中心&#xff0c;每个网格内的计算需求…

案例058:基于微信小程序的智能社区服务系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Python脚本模拟真实设备刷视频播放量、浏览量

简述 Python3脚本刷视频播放量 前情提示 系统:centOS7,8阿里云一折优惠云小站_专享特惠_云产品推荐-阿里云 宝塔8.x 一说 部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者…

半导体划片机助力氧化铝陶瓷片切割:科技与工艺的完美结合

在当今半导体制造领域&#xff0c;氧化铝陶瓷片作为一种高性能、高可靠性的材料&#xff0c;被广泛应用于各种电子设备中。而半导体划片机的出现&#xff0c;则为氧化铝陶瓷片的切割提供了新的解决方案&#xff0c;实现了科技与工艺的完美结合。 氧化铝陶瓷片是一种以氧化铝为基…

三相电表可以当作高压电表使用吗?

在电力系统中&#xff0c;为了准确测量和计量电能的使用情况&#xff0c;电表起着至关重要的作用。与此同时&#xff0c;为了满足不同电网的需求&#xff0c;各种类型的电表被研发和设计出来。其中&#xff0c;三相电表作为常见的一种类型&#xff0c;广泛应用于低压电网中。但…

打工人副业变现秘籍,某多/某手变现底层引擎-StableDiffusionUI引擎部署

Stable Diffusion Web UI是一个基于Stable Diffusion的交互式程序,使用gradio模块构建而成。除了基本的txt2img、img2img等功能外,该模块还包含许多模型融合改进、图片质量修复等附加升级。所有这些功能都可以通过易于使用的Web应用程序图形用户界面进行访问。 一、简介 St…