Google Dork 搜索工具 - 提取目标网站 URL

本工具使用 Python 编写的,可高效提取目标网站 URL,支持多线程和多进程,提升搜索效率。

代码解析

import requests
import time
import os
import urllib3
import sys
import random
from bs4 import BeautifulSoup
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
from threading import Lock
from colorama import Fore, init

now_time = time.strftime('%Y-%m-%d %H-%M')


# 读取Dorks
def work(dorks):
    with open(dorks, mode='r', encoding='utf-8') as file:
        read_content = file.readlines()
        # 将内容加入列表
        content = [result.strip() for result in read_content]
        # 返回数量丢给任务池
        return len(read_content), content


# Google搜索
def google_serach(query, locks, filename):
    try:
        # 关闭HTTPS报错信息
        urllib3.disable_warnings()
        filename = os.path.join(os.getcwd(), f'{filename}.txt')
        domains = ['fr','it','ca','co.uk','ru','co,jp','co.kr','com.au','co.in','com.br','com.ar','co.za','co.nz','es','se','nl','ch','at','dk','be','pl','fi','ie','pt','gr', 'tw', 'com', 'uk', 'de', 'br', 'ca', 'kr', 'mx', 'au', 'za']
        random_domain = random.choice(domains)
        url = f'https://www.google.{random_domain}/search?q={query}&num=100'
        # 请求头
        headers = {
                   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
                   'accept-language': 'zh-CN,zh;q=0.9',
                   '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.7',
                   'referer': 'https://www.google.com/',
                   'origin': 'https://www.google.com',
                   'Sec-Fetch-Site': 'same-origin',
                   'Sec-Fetch-Mode': 'navigate',
                   'Sec-Fetch-User': '?1',
                   'Sec-Fetch-Dest': 'document'
        }
        # 代理
        proxies = {'http': 'http://127.0.0.1:10809', 'https': 'http://127.0.0.1:10809'}
        response = requests.get(url=url, headers=headers, proxies=proxies, verify=False, timeout=5)
        soup = BeautifulSoup(response.content, 'html.parser')
        # 查找全部div标签
        find_div = soup.find_all('div', {'class': 'yuRUbf'})
        # 开启线程锁
        locks.acquire()
        # 加入列表
        get_url = [url.find('a').get('href') + '\n' for url in find_div if 'google.com.tw' not in url.find('a').get('href')]
        global url_num, dork_finish_num
        url_num += len(get_url)
        dork_finish_num += 1
        print(Fore.GREEN + f'\r{now_time}[INFO]{ '-' * 10}>已获取Url数量:{url_num}  Dorsk数量:{dork_finish_num} / {dork_total_num}', end='' + Fore.RESET)
        # 写入文件
        write_info(filename, get_url)
        # 释放线程锁
        locks.release()

    except TimeoutError:
        pass


# 写入文件函数
def write_info(filename, get_url):

    with open(filename, mode='a+', encoding='utf-8') as file:
        if get_url:
            file.writelines(get_url)


if __name__ == '__main__':
    while True:
        try:
            init()  # 初始化颜色模块
            dorks_filename = input(Fore.YELLOW + f'\n{now_time}[INFO]{ '-' * 10}>input file:' + Fore.RESET)
            print('')
            filename = input(Fore.YELLOW + f'\n{now_time}[INFO]{ '-' * 10}>output filename:' + Fore.RESET)
            # 接受work函数返回的元组
            dork_total_num, query_list = work(dorks_filename)
            # 定义全局变量完成数量/URL数量
            dork_finish_num = url_num = 0

            # 定义进程池和线程池数量
            process_pool = ProcessPoolExecutor(max_workers=4)
            thread_pool = ThreadPoolExecutor(max_workers=20)

            # 定义全局锁
            threads_lock = Lock()

            # 分配进程池任务
            for dokr_list in query_list:
                process_pool.submit(thread_pool.submit, google_serach, dokr_list, threads_lock, filename)

            process_pool.shutdown(wait=True)
            thread_pool.shutdown(wait=True)
            print(Fore.GREEN + f'\n\n{now_time}[INFO]{'-' * 10}>程序运行完毕' + Fore.RESET)
            if len(sys.argv) == 1:
                pass
            input(Fore.YELLOW + f'\n
{now_time}[INFO]{'-' * 10}>按回车退出' + Fore.RESET)
            break
        # 文件为空
        except FileNotFoundError:
            print(Fore.RED + f'{now_time}[Error]{'-' * 10}>文件不存在' + Fore.RESET)
        # 中断异常
        except KeyboardInterrupt:
            sys.exit(1)

使用说明

  1. 将代码保存为.py文件,例如google_dork.py
  2. 准备一个包含 Google Dork 的文本文件,例如 dorks.txt,每个 Dork 占一行。
  3. 运行代码,输入 Dork 文件名和输出文件名,例如:
input file: dorks.txt
output filename: urls.txt
  1. 等待程序运行完成,程序会将提取到的目标网站 URL 写入指定的输出文件中。

注意

  • 代码中使用的是 Shadowsocks 代理,请确保已配置代理并修改代码中的代理地址和端口。
  • 使用 Google Dork 搜索时请遵守 Google 的使用条款。
  • 代码仅供学习参考,请勿用于非法用途。

总结

本工具可帮助您快速提取目标网站 URL,提高您的工作效率。希望本工具能够帮助您更好地进行安全研究、信息收集等工作。

如有任何问题,欢迎留言交流!

Google Dork 搜索工具 - 提取目标网站URL

原文地址: https://www.cveoy.top/t/topic/oZPJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录