├── README.md └── fscanDC.py /README.md: -------------------------------------------------------------------------------- 1 | # fscanDC 2 | fscan结果优化,更新DC域筛选 3 | -------------------------------------------------------------------------------- /fscanDC.py: -------------------------------------------------------------------------------- 1 | import re 2 | import os 3 | from argparse import ArgumentParser 4 | 5 | # sys读取参数 6 | arg = ArgumentParser(description='Fscan_quchong') 7 | arg.add_argument('-i', '--file', nargs='*',dest='file',help='Scan multiple targets given in a txt file',type=str) 8 | arg.add_argument('-o', '--outfile', dest='outfile', help='the file save result', default='result.txt',type=str) 9 | result = arg.parse_args() 10 | # 数据结构 11 | 12 | SSH=[] 13 | ftp=[] 14 | redis=[] 15 | mysql=[] 16 | mssql=[] 17 | oracle=[] 18 | Memcached=[] 19 | poc=[] 20 | WebTitle=[] 21 | InfoScan=[] 22 | rdp=[] 23 | MS17010=[] 24 | DC=[] 25 | dic_use={ 26 | # 可利用信息梳理 27 | r".*SSH.*":SSH, 28 | r".*redis.*":redis, 29 | r".*mysql.*":mysql, 30 | r".*oracle.*":oracle, 31 | r".*mssql.*":mssql, 32 | r".*Memcached.*":Memcached, 33 | r".*ftp.*":ftp, 34 | r".*poc.*":poc, 35 | r".*DC.*":DC, 36 | r".*InfoScan.*":InfoScan, 37 | 38 | # 端口开放 39 | r":(\d?3389|33899.*)":rdp, 40 | r".*MS17-010.*":MS17010, 41 | r".*WebTitle.*":WebTitle 42 | } 43 | pattern=r"----------.*----------" 44 | 45 | def getInfo(): 46 | filetargets=[] 47 | # 读取指定txt,支持多个 48 | if result.file!=None: 49 | filetargets=result.file 50 | else: 51 | # 遍历当前文件夹 读取全部txt 52 | for dirpath, dirnames, filenames in os.walk('.'): 53 | for filename in filenames: 54 | if filename.endswith('txt'): 55 | filetargets.append(filename) 56 | print("作用范围:"+str(filetargets)) 57 | for filepath in filetargets: 58 | with open(filepath,'r',encoding='utf-8') as f: 59 | for line in f.readlines(): 60 | for key in dic_use.keys(): 61 | if re.findall(key,line): # 正则匹配 62 | if not re.findall(pattern,line): # 去重原结果文件 63 | dic_use[key].append(line) 64 | dic_use[key]=list(set(dic_use[key])) # 去重 65 | 66 | def output(): 67 | if result.outfile !=None: 68 | filename=result.outfile 69 | with open(filename,"a",encoding='utf-8') as file: 70 | #清空输出文件 71 | file.seek(0) 72 | file.truncate() 73 | for key in dic_use: 74 | if len(dic_use[key])!=0: 75 | if '3389' in key: 76 | file.write("----------"+"疑似RDP"+"----------"+"\n") 77 | file.write("\n") 78 | else: 79 | # 写入数据 80 | file.write("----------"+key[2:-2]+"----------"+"\n") 81 | file.write("\n") 82 | for i in dic_use[key]: 83 | file.write(i) 84 | file.write("\n") 85 | print("结果已生成:"+filename) 86 | def main(): 87 | getInfo() 88 | output() 89 | 90 | if __name__ == '__main__': 91 | main() --------------------------------------------------------------------------------