int(111) int(111) 子域名收集 | 绝缘体

子域名收集

 
更多

对子域名进行收集有很多种方式比如子域名挖掘机(主动)、搜索引擎信息收集(被动) ,要保证尽量不要让目标知道我们的存在 所以如果没有特殊需要 我们选择搜索引擎收集子域名信息

爬虫获取a标签(IO密集型)—->多线程

只爬取几页十几页内容(线程的创建与删除几乎不会影响时间)—->直接创建线程 不使用线程池

"""
只需要修改第23行的baidu.com 就可以获得你想搜寻的子域名   默认爬取十页
"""
import requests
import threading
from lxml import etree
from urllib.parse import urlparse


def get_domain(target: str):
    headers = {
        'Referer': 'https://cn.bing.com/chrome/newtab',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'}
    response = requests.get(headers=headers, url=target)
    html = response.content.decode('utf-8')
    tree = etree.HTML(html)
    result = tree.xpath('//*[@id="b_results"]/li/div[1]/h2/a/@href')
    with mutex:
        subdomain.extend([urlparse(j).scheme + '://' + urlparse(j).netloc for j in result])


if __name__ == '__main__':
    domain = 'baidu.com' # 目标域名
    thread_list = list()
    subdomain = list()
    mutex = threading.Lock()

    for i in range(10):  # 爬取多少个页面 一个页面就是一个子线程
        url = f'https://cn.bing.com/search?q=site:{domain}&first={i * 10}'
        thread_list.append(threading.Thread(target=get_domain, args=(url,)))
    for t in thread_list:
        t.start()
    for t in thread_list:  # join等待保证所有线程都执行完毕
        t.join()

    print(set(subdomain))  # 去重

就算搜索的是同一个域名 每次搜索出的子域名数量都可能不同,因为每次返回页面内容可能会有不同!!!

假设 搜索site:163.com ———->可能会出现这种情况

  • https://email.163.com

  • https://c.m.163.com/news/a/GVAGHR6R05149BJI.html

  • https://c.m.163.com/news/a/GVBSQRJ20008856R.html

二和三算作一个域名 https://c/m.163.com 所以数量为2

再次搜索site:163.com 返回下面三个a标签

  • https://email.163.com
  • https://cg.163.com
  • https://c.m.163.com/news/a/GVAGHR6R05149BJI.html

子域名数量为3

打赏

本文固定链接: https://www.cxy163.net/archives/5217 | 绝缘体

该日志由 绝缘体.. 于 2025年10月25日 发表在 未分类 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 子域名收集 | 绝缘体
关键字: , , , ,

子域名收集:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter