-
Notifications
You must be signed in to change notification settings - Fork 0
/
FOFA_GUI.py
392 lines (368 loc) · 38.4 KB
/
FOFA_GUI.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
#coding=utf-8
from tkinter import ttk,filedialog,Tk,StringVar,BooleanVar,Menu,Scrollbar,Toplevel
import pyperclip
import requests
import base64
import json
import threading
import queue
import os
import time
import csv
import mmh3
import webbrowser
from bs4 import BeautifulSoup
requests.packages.urllib3.disable_warnings()
item_text=[]
proxies = {'http': None, 'https': None}
num=1
stop_run=False
def start_tk():
def treeviewClick(event):
global item_text
menu.post(event.x_root, event.y_root)
for item in tree.selection():
item_text = tree.item(item, "values")
return item_text
def gourl(event):
for item in tree.selection():
item_text = tree.item(item, "values")
webbrowser.open(item_text[1])
def copyIP():
global item_text
pyperclip.copy(item_text[3])
def copyURL():
global item_text
pyperclip.copy(item_text[1])
def copybackup():
global item_text
pyperclip.copy(item_text[7])
def on_closing():
os._exit(0)
def stop():
global stop_run
stop_run = True
Label_4.config(text="正在终止线程...")
def fofa():
Label_4.config(text="正在获取数据...")
global num
global stop_run
t = []
stop_run = False
num = 1
x = tree.get_children()
for item in x:
tree.delete(item)
q = queue.Queue()
b = queue.Queue()
query = Entry_1.get()
count = int(comboxlist2.get())
th = int(comboxlist1.get())
fields = "host,title,ip,port,domain,server"
query = base64.b64encode(query.encode('utf-8')).decode('utf-8')
r = requests.get(
url="https://fofa.info/api/v1/search/all?email={}&key={}&fields={}&qbase64={}&size={}".format(fofa_email,
fofa_key,
fields, query,
count),
proxies=proxies)
data = json.loads(r.text.encode("GBK", 'ignore').decode('GBK'))
# print(data)
if h1.get():
for i in data['results']:
if 'http' in i[0]:
pass
else:
if ':443' in i[0]:
i[0] = 'https://' + i[0]
else:
i[0] = 'http://' + i[0]
q.put(i)
for i in range(th):
thread = threading.Thread(target=spider, args=(q, b, h2.get()))
t.append(thread)
for i in range(th):
t[i].start()
else:
for i in data['results']:
if 'http' in i[0]:
host = i[0]
else:
if ':443' in i[0]:
host = 'https://' + i[0]
else:
host = 'http://' + i[0]
title = i[1].strip()
ip = i[2]
prot = i[3]
domain = i[4]
server = i[5]
result(host, title, ip, prot, domain, server, '')
Label_4.config(text="扫描任务已结束")
# time.sleep(60)
def spider(q, b, brute):
global stop_run
while not q.empty():
x = q.get_nowait()
# print(x)
host = x[0]
ip = x[2]
prot = x[3]
domain = x[4]
server = x[5]
if stop_run:
break
try:
r = requests.get(host, timeout=3, verify=False, proxies=proxies)
html = r.content
soup = BeautifulSoup(html, 'html.parser')
a = soup.find_all('title')
title = a[0].string.strip()
# a=soup.title.text
if brute:
if a:
b.put(host)
elif r.status_code != 404:
b.put(host)
Backup(b, host, title, ip, prot, domain, server)
else:
if a:
result(host, title, ip, prot, domain, server, '')
elif r.status_code != 404:
result(host, '', ip, prot, domain, server, '')
else:
pass
except Exception as e:
pass
if int(comboxlist2.get()) >= 500:
time.sleep(10)
if int(comboxlist2.get()) < 500:
time.sleep(5)
Label_4.config(text="扫描任务已结束")
def Backup(b, host, title, ip, prot, domain, server):
f = open('dir.txt', 'r')
dirs = f.readlines()
while not b.empty():
u = b.get_nowait()
backup = False
for path in dirs:
path = path.strip('\n')
t = u + path
print(t)
try:
r = requests.get(t, timeout=3, verify=False, proxies=proxies)
text = r.text.encode("GBK", 'ignore').decode('GBK')
if r.status_code == 200 and 'html' not in text and ('PK' in text or 'Rar' in text):
result(host, title, ip, prot, domain, server, t)
backup = True
else:
pass
except Exception as e:
pass
if backup == False:
result(host, title, ip, prot, domain, server, '')
def create():
global e1
global e2
top = Toplevel()
top.title('ICON_HASH')
top.wm_attributes("-topmost", 1)
top.geometry("400x150+550+250")
top.resizable(width=False, height=False)
L1 = ttk.Label(top, text="ICO 地址:", font=("宋体", 11))
L1.place(relx=0.020, rely=0.030, relwidth=0.30, relheight=0.30)
e1 = ttk.Entry(top)
e1.place(relx=0.2, rely=0.10, relwidth=0.600, relheight=0.2)
L2 = ttk.Label(top, text="HASH:", font=("宋体", 11))
L2.place(relx=0.095, rely=0.4, relwidth=0.3, relheight=0.30)
e2 = ttk.Entry(top)
e2.place(relx=0.2, rely=0.40, relwidth=0.600, relheight=0.4)
b = ttk.Button(top, text="转换", command=hash)
b.place(relx=0.820, rely=0.090, relwidth=0.140, relheight=0.20)
def hash():
url = e1.get()
r = requests.get(url, proxies=proxies)
favicon = base64.encodebytes(r.content)
hash = mmh3.hash(favicon)
result = 'icon_hash="{}"'.format(hash)
e2.insert("end", result + '\n')
def result(host, title, ip, port, domain, server, backup=None):
global num
li = [num, host, title, ip, port, domain, server, backup]
# print(li)
num = int(num) + 1
if (num % 2) == 0:
tree.insert('', 'end', values=li, tags=('oddrow',))
else:
tree.insert('', 'end', values=li)
def save():
li = []
file_path = filedialog.asksaveasfilename(initialdir=os.path.abspath('.'), title=u'保存文件',
filetypes=[('csv File', '.csv')])
f = open(file_path + '.csv', 'a+', encoding='utf_8_sig', newline='')
winter = csv.writer(f)
column = ['序号', 'HOST', '标题', 'IP', '端口', '域名', '服务', '备份文件']
winter.writerow(column)
for row_id in tree.get_children():
row = tree.item(row_id)
li.append(row['values'])
winter.writerows(li)
def fofa_help():
top = Toplevel()
top.title('帮助')
l = [1, 2, 3]
on_hit = False
# top.wm_attributes("-topmost",1)
top.geometry("800x800+550+0")
# top.resizable(relwidth=False, relheight=False)
help_label = ttk.Label(top, text='查询语法参考', font=("黑体", 11))
help_label.place(relx=0.020, rely=0.020, relwidth=0.140, relheight=0.030)
tree2 = ttk.Treeview(top, columns=l, height=10, show="headings")
style2 = ttk.Style()
style2.configure('Treeview.Heading', font=("黑体", 12), foreground='green')
style2.configure('Treeview', font=("宋体", 10))
tree2.column('1', width=255, anchor='w')
tree2.column('2', width=255, anchor='w')
tree2.column('3', width=250, anchor='w')
tree2.heading('1', text='例句', anchor='w')
tree2.heading('2', text='用途说明', anchor='w')
tree2.heading('3', text='注', anchor='w')
tree2.place(relx=0.020, rely=0.060, relwidth=0.960, relheight=0.890)
VScroll1 = Scrollbar(top, orient='vertical', command=tree2.yview)
# VScroll1.pack()
VScroll1.place(relx=0, rely=0, relwidth=0, relheight=0)
tree.configure(yscrollcommand=VScroll1.set)
li = [['&&', '和', '-'], ['||', '或', '-'], ['!=', '不等于', '-'], ['==', '完全匹配', '-'],
['title="beijing"', '从标题中搜索“北京”', '-'], ['header="elastic"', '从http头中搜索“elastic”', '-'],
['body="网络空间测绘"', '从html正文中搜索“网络空间测绘”', '-'], ['domain="qq.com"', '搜索根域名带有qq.com的网站。', '-'],
['icp="京ICP证030173号"', '查找备案号为“京ICP证030173号”的网站', '搜索网站类型资产'],
['js_name="js/jquery.js"', '查找网站正文中包含js/jquery.js的资产', '搜索网站类型资产'],
['js_md5="82ac3f14327a8b7ba49baa208d4eaa15"', '查找js源码与之匹配的资产', '-'],
['icon_hash="-247388890"', '搜索使用此icon的资产。', '仅限FOFA高级会员使用'],
['host=".gov.cn"', '从url中搜索”.gov.cn”', '搜索要用host作为名称'], ['port="6379"', '查找对应“6379”端口的资产', '-'],
['ip="1.1.1.1"', '从ip中搜索包含“1.1.1.1”的网站', '搜索要用ip作为名称'],
['ip="220.181.111.1/24"', '查询IP为“220.181.111.1”的C网段资产', '-'],
['status_code="402"', '查询服务器状态为“402”的资产', '-'],
['protocol="quic"', '查询quic协议资产', '搜索指定协议类型(在开启端口扫描的情况下有效)'], ['country="CN"', '搜索指定国家(编码)的资产。', '-'],
['region="Xinjiang"', '搜索指定行政区的资产。', '-'], ['city="wuhan"', '搜索指定城市的资产。', '-'],
['cert="baidu"', '搜索证书(https或者imaps等)中带有baidu的资产。', '-'],
['cert.subject="Oracle Corporation"', '搜索证书持有者是Oracle Corporation的资产', '-'],
['cert.issuer="DigiCert"', '搜索证书颁发者为DigiCert Inc的资产', '-'],
['cert.is_valid=true', '验证证书是否有效,true有效,false无效', '仅限FOFA高级会员使用'],
['banner=users && protocol=ftp', '搜索FTP协议中带有users文本的资产。', '-'],
['type=service', '搜索所有协议资产,支持subdomain和service两种', '搜索所有协议资产'], ['os="centos"', '搜索CentOS资产。', '-'],
['server=="Microsoft-IIS/10"', '搜索IIS 10服务器。', '-'],
['app="Microsoft-Exchange"', '搜索Microsoft-Exchange设备', '-'],
['after="2017" && before="2017-10-01"', '时间范围段搜索', '-'], ['asn="19551"', '搜索指定asn的资产。', '-'],
['org="Amazon.com,Inc."', '搜索指定org(组织)的资产。', '-'], ['base_protocol="udp"', '搜索指定udp协议的资产。', '-'],
['is_fraud=false', '排除仿冒/欺诈数据', '-'], ['is_honeypot=false', '排除蜜罐数据', '仅限FOFA高级会员使用'],
['is_ipv6=true', '搜索ipv6的资产', '搜索ipv6的资产,只接受true和false。'],
['is_domain=true', '搜索域名的资产', '搜索域名的资产,只接受true和false。'],
['port_size="6"', '查询开放端口数量等于"6"的资产', '仅限FOFA会员使用'],
['port_size_gt="6"', '查询开放端口数量大于"6"的资产', '仅限FOFA会员使用'],
['port_size_lt="12"', '查询开放端口数量小于"12"的资产', '仅限FOFA会员使用'],
['ip_ports="80,161"', '搜索同时开放80和161端口的ip', '搜索同时开放80和161端口的ip资产(以ip为单位的资产数据)'],
['ip_country="CN"', '搜索中国的ip资产(以ip为单位的资产数据)。', '搜索中国的ip资产'],
['ip_region="Zhejiang"', '搜索指定行政区的ip资产(以ip为单位的资产数据)。', '搜索指定行政区的资产'],
['ip_city="Hangzhou"', '搜索指定城市的ip资产(以ip为单位的资产数据)', '搜索指定城市的资产'],
['ip_after="2021-03-18"', '搜索2021-03-18以后的ip资产(以ip为单位的资产数据)。', '搜索2021-03-18以后的ip资产'],
['ip_before="2019-09-09"', '搜索2019-09-09以前的ip资产(以ip为单位的资产数据)。', '搜索2019-09-09以前的ip资产']]
for i in li:
tree2.insert('', 'end', values=i)
def on_closing():
win.destroy()
# if __name__ == '__main__':
with open('fofa.json', 'r') as fp:
json_data = json.load(fp)
fofa_email = json_data['fofa_email']
fofa_key = json_data['fofa_key']
# count=json_data['count']
win = Tk()
win.protocol('WM_DELETE_WINDOW', on_closing)
img = b'AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMXcAAAACAAAAAAAAAAAyMjJbMzMznDQ0NCwAAAAAAAAAADIyMnEvLy8rAAAAAAAAAAAAAAAAAAAAAAAAAAAyMjIzMzMziAAAAAAzMzMZMzMz8jU1NRgyMjKAMTExFQAAAAAyMjLKMjIyVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADExMT4yMjJ6MTExXTMzM78AAAAAJCQkBzIyMnAAAAAAMzMzmzIyMo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExWDMzM9IzMzOWAAAAAAAAAAAvLy8mAAAAADQ0NEoyMjLVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzOvMzMzggAAAAAAAAAAAAAAAEBAQAQzMzMPMzMz5TAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIytjMzM+EvLy8bAAAAAAAAAAAgICAIMjIypzMzM+czMzPZMTExoDExMUMAAAAAAAAAAAAAAAAqKioGAAAAADMzM8cyMjKEMzMzrkBAQAQAAAAAAAAAADU1NR00NDQsMzMzuAAAAAAAAAAAAAAAAAAAAAAyMjJ7MjIyVwAAAAAzMzPTNDQ0YjIyMlYzMzN9AAAAAC4uLhwyMjKoAAAAADMzM8IqKioSAAAAAAAAAAAAAAAAMTExbTMzM3QAAAAAMzMz4jIyMkIAAAAAMjIysjQ0NCIzMzMKMjIyticnJw0yMjJbMjIyZi0tLREzMzMeAAAAAFVVVQMyMjKAMzMzgTIyMrxAQEAEAAAAADQ0NCwyMjJgAAAAADU1NR0yMjKPMjIywDMzM+EzMzPSMzMzvTExMWIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAqKioMMzMzWjIyMpkyMjK8MzMzyTMzM8QzMzOwMjIymTMzM4EyMjJ2MjIyhDIyMmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
tmp = open("tmp.ico", "wb+")
tmp.write(base64.b64decode(img))
tmp.close()
win.iconbitmap("tmp.ico")
os.remove("tmp.ico")
win.title('信息收集工具内置版-Feng_KD')
# win.wm_attributes("-topmost",1)
win.geometry("1000x600+350+150")
# win.resizable(relwidth=False, relheight=False)
menbar=Menu(win)
menbar.add_command(label="帮助",command=fofa_help)
# menbar.add_command(label="关于",command=about)
win.config(menu=menbar)
Label_1=ttk.Label(win,text="查询语法",font=("黑体",14))
Label_1.place(relx =0.020,rely =0.030,relwidth =0.100,relheight = 0.050)
var1=StringVar()
comboxlist1=ttk.Combobox(win,textvariable=var1)
comboxlist1['values']=('50','100','300','500','1000')
comboxlist1.current(2)
comboxlist1.place(relx=0.680,rely=0.025,relwidth=0.050,relheight=0.040)
var2=StringVar()
comboxlist2=ttk.Combobox(win,textvariable=var2)
comboxlist2['values']=('100','500','1000','5000','10000')
comboxlist2.current(2)
comboxlist2.place(relx=0.680,rely=0.085,relwidth=0.050,relheight=0.040)
Label_2=ttk.Label(win,text="线程数:",font=("宋体",11))
Label_2.place(relx = 0.620,rely =0.032,relwidth =0.060,relheight =0.030)
Label_3=ttk.Label(win,text="获取数:",font=("宋体",11))
Label_3.place(relx = 0.620,rely =0.092,relwidth =0.060,relheight = 0.030)
Label_4=ttk.Label(win,text='',font=("宋体",10))
Label_4.place(relx = 0.14,rely =0.950,relwidth =0.12,relheight = 0.040)
Entry_1=ttk.Entry(win)
Entry_1.place(relx = 0.110,rely =0.028,relwidth = 0.480,relheight = 0.050)
h1=BooleanVar()
h2=BooleanVar()
Button_1=ttk.Button(win,text="查询",command=fofa)
Button_1.place(relx = 0.745,rely =0.02,relwidth = 0.100,relheight = 0.05)
Button_2=ttk.Button(win,text="停止",command=stop)
Button_2.place(relx = 0.860,rely=0.02,relwidth = 0.100,relheight = 0.05)
Button_3=ttk.Button(win,text="导出",command=save)
Button_3.place(relx = 0.860,rely= 0.08,relwidth = 0.100,relheight = 0.05)
Button_4=ttk.Button(win,text="ICON",command=create)
Button_4.place(relx = 0.745,rely= 0.08,relwidth = 0.100,relheight = 0.05)
col=[1,2,3,4,5,6,7,8]
tree=ttk.Treeview(win,columns = col,height=10,show="headings")
style = ttk.Style()
print(style.theme_names())
style.theme_create( "st_app", parent="vista",settings={
".":{"configure":{"background":"SystemButtonFace","foreground": 'SystemWindowText',"selectbackground":"SystemHighlightText","selectforeground":"SystemHighlight","insertcolor":"SystemWindowText","font":"TkDefaultFont"}},
"Treeview":{"configure":{},"map":{"background":[("selected","SystemHighlight")]}},
"TCombobox":{"configure":{"padding":"1"}},
"TButton":{"configure":{"anchor":"center","padding":1,"font":("宋体",10)}},
"TCheckbutton":{"configure":{"padding":2,"font":("宋体",11)}}
})
style.theme_use("st_app")
style.configure('Treeview.Heading',font=("黑体",12),foreground='#00bfff')
style.configure('Treeview',font=("宋体",10))
tree.column('1',width=10,anchor='center')
tree.column('2',width=150,anchor='center')
tree.column('3',width=150,anchor='center')
tree.column('4',width=80,anchor='center')
tree.column('5',width=10,anchor='center')
tree.column('6',width=50,anchor='center')
tree.column('7',width=100,anchor='center')
tree.column('8',width=50,anchor='center')
tree.heading('1',text='序号')
tree.heading('2',text='HOST')
tree.heading('3',text='标题')
tree.heading('4',text='IP')
tree.heading('5',text='端口')
tree.heading('6',text='域名')
tree.heading('7',text='服务')
tree.heading('8',text='备份')
tree.bind('<3>', treeviewClick)
tree.tag_configure('oddrow',background='white')
menu = Menu(win, tearoff=False)
menu.add_command(label="复制URL", command=copyURL)
menu.add_command(label="复制IP", command=copyIP)
menu.add_command(label="复制备份", command=copybackup)
tree.bind('<Double-Button-1>',gourl)
tree.place(relx = 0.020,rely =0.140,relwidth = 0.950,relheight =0.800)
VScroll1 = Scrollbar(win, orient='vertical', command=tree.yview)
VScroll1.place(relx=0.970, rely=0.140, relwidth=0.014, relheight=0.800)
tree.configure(yscrollcommand=VScroll1.set)
win.protocol("WM_DELETE_WINDOW", on_closing)
win.mainloop()