众所周知xray
是可以进行子域名爆破、查询的,但是导出来的是html
,不利于我部署自动化任务
而且出来的结果,有的是类似泛解析一样的,比如访问a网页会跳转到c网页,访问b网页也会跳转到c网页,c网页是专门用来处理访问不到页面后跳转的,所以专门写了个脚本来导出,并且清理数据
这个脚本只导出http状态码为200的,有需要可以自行添加
先导入所需要的库
import sys
import re
import os
import time
import requests
首先获取文件名
...
#判断是否存在文件名
try:
filename = sys.argv[1]
#w_filename=sys.argv[2]
except:
print("Usage: python Elapse.py <subdomain file> #d<saved file name>")
time.sleep(3)
sys.exit(0)
xray中查询子域名导出的html,一份只能有500个子域名,多了的话,就会新保存一个文件,并且命名500-filename.html
,每次多500
所以写一个自动往下查询的
#检测文件是否存在,并自动往后查询
def check_file(filename):
filelist=[]
#判断是否存在类似500-sub.html的格式
file_num=re.findall('(\d*)-.*\.html',filename)
if file_num:
num=int(file_num[0])
initfile=filename.replace(str(num)+"-",'')
else:
#如果没有,那就初始化为0
num=0
while True:
a=os.path.isfile(filename)
if a:
filelist.append(filename)
num+=500
filename=str(num)+"-"+initfile
else:
print("文件: "+filename+" 不存在,正在导出列表...")
return filelist
因为有的时候可能是从500-sub.html开始查询,所以写了个正则匹配这个格式,有的话,那就保存你当前的数字,然后下一次加500
接着开始主体
...
checkexist=check_file(filename)
num=1
for forname in checkexist:
w_filename="result-"+str(num)+".txt"
sub_file = open(forname,"r",encoding="utf-8")
write_file=open(w_filename,"a",encoding='UTF-8')
保存的文件也理所当然的需要用变
...
#sub用于判断是否重复
sub=[]
for i in sub_file:
# 无脑匹配url和状态码和title
result=re.findall(r'{"link":"(.*?)","status":(.*?),"title":"(.*?)","server',i)
try:
url=result[0][0]
http_code=result[0][1]
title=result[0][2]
if http_code != "200":
print("状态码非200,正在跳过处理...")
continue
repeat=findurl(url)
if repeat in sub:
print("检测到302跳转后类似泛解析,正在跳过处理...")
else:
sub.append(repeat)
write_file.write(url+"\n")
print("成功写入一条数据...")
print("url: "+url+" code: "+http_code+" title: "+title)
except:
print("这行未检测到内容...")
#traceback.print_exc()
pass
sub_file.close()
write_file.close()
num+=1
github:https://github.com/Ernket/xray_subdomain_export
最后祝各位中秋节、国庆节快乐