1. 程式人生 > 其它 >利用Python實現網站子域名列舉

利用Python實現網站子域名列舉

  實現原理

  將子域名拼接到目標域名前面,然後通過Python程式碼進行訪問,判斷返回結果,從而跑出子域名是否存在。也就是,利用Requests模組發起對目標網站的請求,如果沒有連線錯誤則表明該子域名存在。本程式碼雖然使用了多執行緒模組,但是在實際測試中發現更慢,可能是目標網站對併發連線實施了限制。

 

import requests
import threading
import sys
import optparse
import os
"""
    Step 1: 利用Optparse模組傳遞引數,即目標域名,以及字典檔名稱
    Step 2: 遍歷字典檔案,並構建URL
    Step 3: 對於每個URL嘗試訪問
""" def get_domain(): parser = optparse.OptionParser('Usage: <Program> -d target domain') parser.add_option('-d','--domain',dest='domain', type='string', help='Specify domain name of target') parser.add_option('-w','--wordlist', dest='wordlist', type='string', help="Specify wordlist to brute crack
") options, args = parser.parse_args() if not options.domain: print(parser.usage) sys.exit() if not options.wordlist: print(parser.usage) sys.exit() return options.domain, options.wordlist def login(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
' } try: # print("Trying subdomain: %s" % url) response = requests.get(headers=headers, url=url) print(url) except requests.exceptions.ConnectionError: pass def banner(): banner = """ *********************************************************************************** ********************************Subdomain Enumerator By Jason Wong***************** *********************************************************************************** """ print(banner) if __name__ == "__main__": banner() target_domain, wordlist = get_domain() if not os.path.exists(wordlist): print("The file doesn't exist") sys.exit(0) with open(wordlist, 'r') as f: print("Start to brute force subdomain of %s\n" % target_domain) for line in f.readlines(): url = "http://" + line.strip().strip('\n') + '.' + target_domain login(url) # t = threading.Thread(target=login, args=(url,)) # t.start()