本来吧,面板中已经写了存活 URL 批量探测的功能,但是呢,因为是基于 PHP 的,会因为 PHP 内存时间而导致大量的 URL 地址探测时爆 502 错误。因此花了点时间,写了个基于 Python 的探测工具。
注意事项:
- 脚本 11 行
D:\Desktop\url.txt
是URL 字典,必须一行一个。 - http 的,不需要加 http:// 开头 ,https 的,需要加上 https:// 协议头,FOFA 搜出来的网站导出后的 URL 就是这样,我也是为了配合 FOFA 的结果,所以写成了这样。
效果:
代码:
import requests import threading import queue success=[] proxys = 0 # 0 关闭代理 1 启用代理 proxy = {"http": "127.0.0.1:7890"} #代理 def get_urls(): url = [] with open(r"D:\Desktop\url.txt") as f: for line in f.readlines(): line = line.strip('\n') url.append(line) return(url) class mythread(threading.Thread): def __init__(self,url_queue): super().__init__() self.url_queue=url_queue def run(self): while True: if not self.url_queue.empty(): url=self.url_queue.get()#从队列里取出一个url self.do_work(url)#执行对应业务操作 self.url_queue.task_done()#通知队列任务执行完成 else: break def do_work(self,url): global success result = 'https://' in url if result == True: url = url else: url = 'http://'+url try: if proxys == 1: html = requests.get(url,allow_redirects=False, proxies=proxy) html.encoding = 'utf-8' html = html.headers['Content-Type'] print("[√] %s 访问正常!"%(url)) success.append(url+ '\n') else: html = requests.get(url,allow_redirects=False) html.encoding = 'utf-8' html = html.headers['Content-Type'] print("[√] %s 访问正常!"%(url)) success.append(url+ '\n') except Exception as e: print("[x] %s 无法访问!"%(url)) if __name__ == '__main__': url_queue=queue.Queue()#存放url的队列 url_list=get_urls()#获取Url列表 for url in url_list:#将所有url存入队列 url_queue.put(url) for i in range(10):#创建线程,循环次数等于线程数 t=mythread(url_queue) t.setDaemon(True) t.start() url_queue.join() success = ''.join(success) print('访问成功的:') print(success)
本文作者为Mr.Wu,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !
为何要启用代理?
@spectator an因为有一些站可能出现被墙的问题,所以加入了代理功能
@Mr.Wu学到了,谢谢
@Mr.Wu学到了,谢谢