栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python子域名扫描脚本

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python子域名扫描脚本

1.扫描子域名的方法 1.字典爆破

这种方式是给出一个顶级域名,然后在字典中写入各种可能存在的子域名,拼接起来一个个访问,如果能够解析成功就说明这个域名真实存在。

2.网页搜索

比如在bing搜索baidu.com,弹出来如下界面:

红框中的域名肯定都是baidu.com真实存在,可以被访问到的域名,只要从页面中提取到这一块内容就能拿到子域名。

2.脚本代码 1.字典爆破脚本

运行前首先准备好一个子域名字典,运行时加上需要查询的顶级域名,程序拿到顶级域名,然后从字典中一个个读出子域名,两者拼接,接着拿去解析,解析成功就是一个有效的子域名。

import sys
import dns.resolver

# 接收用户输入的顶级域名
domain = sys.argv[1]
domain_lst = []
with open('E:python脚本subdomain.txt', 'r') as f:
    # 从字典中读出一个子域名
    for i in f:
        i = i.strip()
        subdomain = i + '.'+domain
        try:
            # 解析拼好的子域名
            ip = dns.resolver.resolve(subdomain, lifetime=1)
            if ip in domain_lst:
                pass
            else:
                domain_lst.append(ip)
                print(subdomain)
        except Exception as e:
            pass
2.网页收集子域名

拿到之后直接点下一页,多点几次,把每一页的url都拿来比较一下

 前两个框是我们传入的参数,后两个框从第三行开始就有规律了,这里就可以构造出待访问的url

然后再看域名所在的html标签,F12查看源代码:

 看到域名都在一个cite标签里面

整体思路为,接收一个待查询的子域名,构造好url访问,拿到会返回的源代码,将源代码中的cite标签提取出来,最后输出。

代码:

import requests
from bs4 import BeautifulSoup
import sys
import re

def find_sub_domain(site, pages):
    Subdomain = []
    # 请求头信息
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'Referer': "https://cn.bing.com/search?q=baidu.com&sp=-1&pq=baidu.com&sc=8-9&qs=n&sk=&cvid=4ADFD86C6FEF49279A09DF578A997EC0&first=8&FORM=PORE",
        'Cookie': "MUID=09F689A7A8796FBB2A449815A9936E45; SUID=M; MUIDB=09F689A7A8796FBB2A449815A9936E45; _EDGE_S=SID=06EB8F7C11DC6122102E9EC810BA6056; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=243B793FFB114F0DAF6B5E13EC7C7D66&dmnchg=1; _SS=SID=06EB8F7C11DC6122102E9EC810BA6056; _UR=QS=0&TQS=0; _HPVN=CS=eyJQbiI6eyJDbiI6MSwiU3QiOjAsIlFzIjowLCJQcm9kIjoiUCJ9LCJTYyI6eyJDbiI6MSwiU3QiOjAsIlFzIjowLCJQcm9kIjoiSCJ9LCJReiI6eyJDbiI6MSwiU3QiOjAsIlFzIjowLCJQcm9kIjoiVCJ9LCJBcCI6dHJ1ZSwiTXV0ZSI6dHJ1ZSwiTGFkIjoiMjAyMi0wNS0zMFQwMDowMDowMFoiLCJJb3RkIjowLCJHd2IiOjAsIkRmdCI6bnVsbCwiTXZzIjowLCJGbHQiOjAsIkltcCI6Mn0=; ipv6=hit=1653877828725&t=4; ZHCHATSTRONGATTRACT=TRUE; SRCHUSR=DOB=20220530&T=1653874238000&TPC=1653874280000; ZHCHATWEAKATTRACT=TRUE; SNRHOP=TS=637894711574924019&I=1; SRCHHPGUSR=SRCHLANG=zh-Hans&BRW=NOTP&BRH=M&CW=767&CH=722&SW=1536&SH=864&DPR=1.25&UTC=480&DM=1&PV=10.0.0&HV=1653874333&WTS=63789471038&BZA=0"
    }
    # page是需要查询的网页数
    for i in range(1, int(pages)+1):
        # 拼凑url
        url = "https://cn.bing.com/search?q="+site+"&sp=-1&pq="+site + "&sc=8-9&qs=n&sk=&cvid=1B54F90605E44CF58E0CAB6DB948D0D0&first=" + str(((int(i)-1)*10)+8) +"&FORM=PERE" + str(i)
        # 发起get请求,拿到返回值
        html = requests.get(url, headers=headers)
        # 把返回值解析成html
        soup = BeautifulSoup(html.content, 'html.parser')
        # 把所有的cite标签全部提取出来
        job_bt = soup.find_all('cite')
        # 对拿到的域名进行正则匹配,这里提前编译好匹配规则
        pattern = re.compile(r"w+.baidu.com")
        for i in job_bt:
            # 通过正则表达式,拿到子域名
            get = re.findall(pattern, str(i))[0]
            if get in Subdomain:
                pass
            else:
                Subdomain.append(get)
                print(get)
if __name__ == '__main__':
    if len(sys.argv) == 3:
        site = sys.argv[1]
        page = sys.argv[2]
    else:
        print("py -3 E:/python脚本/子域名爆破脚本.py domain pages")
        sys.exit(-1)
    Subdomain = find_sub_domain(site, page)

运行效果如下:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号