· 4 years ago · Jul 05, 2021, 03:00 AM
1#Author AnonBie
2
3import os, re, sys, time, json, requests, textwrap, socket
4from email_validator import validate_email, EmailNotValidError
5from googlesearch import search
6from lxml.html import fromstring
7from getpass import getpass
8from shutil import which
9
10r = "\033[31m"
11g = "\033[32m"
12y = "\033[33m"
13b = "\033[34m"
14p = "\033[35m"
15d = "\033[2;37m"
16w = "\033[0m"
17
18W = f"{w}\033[1;47m"
19R = f"{w}\033[1;41m"
20G = f"{w}\033[1;42m"
21Y = f"{w}\033[1;43m"
22B = f"{w}\033[1;44m"
23
24home = os.getenv("HOME")
25cokifile = home + "/.cookies"
26space = " "
27lines = space + "-"*44
28apihack = "https://api.hackertarget.com/{}/?q={}"
29mbasic = "https://mbasic.facebook.com{}"
30graph = "https://graph.facebook.com{}"
31headers = {"User-Agent":"Opera/9.80 (J2ME/MIDP; Opera Mini/9.80 (S60; SymbOS; Opera Mobi/23.334; U; id) Presto/2.5.25 Version/10.54"}
32logo = f"""{b}
33
34 ';CpKKKKKKKKKKKKKKKpC;'
35 -"iPKKKKKKKKKKKKKKKKKKKKKKKPi"-
36 `~v]KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK]v~`
37 ,rwKKKKKKKKKKKKKPv;,:'-':,;vPKKKKKKKKKKKKKwr,
38 !KKKKKKKKKKKKKKK/ !KKKKKKKKKKKKKKK!
39 !KKKKKKKKKKKKKKf CKKKKKKKKKKKKKK!
40 !KKKKKKKKKKKKKp- -qKKKKKKKKKKKKK!
41 !KKKKKKKKKKKKK>" "\KKKKKKKKKKKKK!
42 !KKKKKKKw;,_'- .-:,"wKKKKKKK!
43 !KKKKKKKKhi*;" ";*ihKKKKKKKK!
44 !KKKKKKKKKKKKK; ;KKKKKKKKKKKKK!
45 !KKKKKKKKKKKKK2>' '>2KKKKKKKKKKKKK!
46 !KKKKKKKKKKKKKKKZ ZKKKKKKKKKKKKKKK!
47 !KKKKKKKKKKKKKKK5 eKKKKKKKKKKKKKKK!
48 !KKKKKKKKKKKqC;- -;CqKKKKKKKKKKK!
49 <KKKKKKKKkr, ,rSKKKKKKKK<
50 ANONBIE
51
52 {w}[ S I G I T ]{b}
53 {d}Simple Information Gathering Tool{w}
54 {d}Author {w}{r}@AnonBie{w}"""
55
56def menu():
57 os.system("clear")
58 print(logo)
59 print(f"""
60 {W}\033[2;30m Choose any number of your requirement or type exit if you wanna leave {w}
61
62 {w}{b} 01{w} Userrecon {d} Username reconnaissance
63 {w}{b} 02{w} Fbdumper {d} Dump facebook information
64 {w}{b} 03{w} Mailfinder {d} Find email with name
65 {w}{b} 04{w} Gdorker {d} Dorking with google search
66 {w}{b} 05{w} Phoneinfo {d} Phone number information
67 {w}{b} 06{w} DNSlookup {d} Domain name system lookup
68 {w}{b} 07{w} Whoislookup {d} Identify who is on domain
69 {w}{b} 08{w} Sublookup {d} Subnetwork lookup
70 {w}{b} 09{w} Hostfinder {d} Find host domain
71 {w}{b} 10{w} DNSfinder {d} Find host domain name system
72 {w}{b} 11{w} RIPlookup {d} Reverse IP lookup
73 {w}{b} 12{w} IPlocate {d} IP to location tracker
74 """)
75 mainmenu()
76
77def mainmenu():
78 while True:
79 try:
80 cmd = str(input(f"{space}{w}{b}>{w} Choose any required option from the above:{b} "))
81 if int(len(cmd)) < 6:
82 if cmd in ("exit","Exit"): exit(r+space+"* Exiting !"+w)
83 elif cmd in ("1","01"): userrecon()
84 elif cmd in ("2","02"): fb.facedumper()
85 elif cmd in ("3","03"): mailfinder()
86 elif cmd in ("4","04"): godorker()
87 elif cmd in ("5","05"): phoneinfo()
88 elif cmd in ("6","06"): infoga("dnslookup")
89 elif cmd in ("7","07"): infoga("whois")
90 elif cmd in ("8","08"): infoga("subnetcalc")
91 elif cmd in ("9","09"): infoga("hostsearch")
92 elif cmd in ("10"): infoga("mtr")
93 elif cmd in ("11"): infoga("reverseiplookup")
94 elif cmd in ("12"): iplocation()
95 else: continue
96 else: continue
97 except KeyboardInterrupt:
98 exit(f"{r}\n{space}* Aborted !")
99
100def iplocation():
101 x = str(input(f"{space}{b}>{w} Enter IP:{b} "))
102 if x.split(".")[0].isnumeric(): pass
103 else: menu()
104 print(w+lines)
105 req = requests.get("https://ipinfo.io/"+x+"/json").json()
106 try: ip = "IP: "+req["ip"]
107 except KeyError: ip = ""
108 try: city = "CITY: "+req["city"]
109 except KeyError: city = ""
110 try: country = "COUNTRY: "+req["country"]
111 except KeyError: country = ""
112 try: loc = "LOC: "+req["loc"]
113 except KeyError: loc = ""
114 try: tz = "TIMEZONE: "+req["timezone"]
115 except KeyError: tz = ""
116 z = [ip, city, country, loc, tz]
117 for res in z:
118 print(f"{space}{b}-{w} {res}")
119 print(w+lines)
120 getpass(space+"Press enter for back to previous menu ")
121 menu()
122
123def infoga(opt):
124 x = str(input(f"{space}{b}>{w} enter domain or IP:{b} "))
125 if not x: menu()
126 if x.split(".")[0].isnumeric(): x = socket.gethostbyname(x)
127 else: pass
128 print(w+lines)
129 req = requests.get(apihack.format(opt,x),stream=True)
130 for res in req.iter_lines():
131 print(f"{space}{b}-{w} {res.decode('utf-8')}")
132 print(w+lines)
133 getpass(space+"Press enter for back to previous menu ")
134 menu()
135
136def phoneinfo():
137 no = str(input(f"{space}{b}>{w} enter number:{b} "))
138 if not no: menu()
139 print(w+lines)
140 url = "https://api.veriphone.io/v2/verify?phone={}&key=5F3F2D6300E445DEA88684053144966C"
141 req = requests.get(url.format(no))
142 res = json.loads(req.text)
143 print(f"{space}{B} DONE {R} {no} {w}")
144 try: print(f"{space}{b}-{w} Type : {y}{res['phone_type']}{w}")
145 except KeyError: pass
146 try: print(f"{space}{b}-{w} Prefix : {y}{res['country_prefix']}{w}")
147 except KeyError: pass
148 try: print(f"{space}{b}-{w} Code : {y}{res['country_code']}{w}")
149 except KeyError: pass
150 try: print(f"{space}{b}-{w} Country : {y}{res['country']}{w}")
151 except KeyError: pass
152 try: print(f"{space}{b}-{w} Global : {y}{res['international_number']}{w}")
153 except KeyError: pass
154 try: print(f"{space}{b}-{w} Local : {y}{res['local_number']}{w}")
155 except KeyError: pass
156 try: print(f"{space}{b}-{w} Provider: {y}{res['carrier']}{w}")
157 except KeyError: pass
158 print(w+lines)
159 getpass(space+"Press enter for back to previous menu ")
160 menu()
161
162def godorker():
163 dork = str(input(f"{space}{b}>{w} enter dork (inurl/intext/etc):{b} ").lower())
164 if not dork: menu()
165 print(w+lines)
166 url = []
167 s = search(dork,num_results=30)
168 for line in s:
169 url.append(line)
170 f = open("result_godorker.txt","w")
171 f.write("# Dork: "+dork+"\n\n")
172 for u in url:
173 try:
174 req = requests.get(u,headers=headers)
175 res = fromstring(req.content)
176 string = res.findtext(".//title")
177 wrapper = textwrap.TextWrapper(width=47)
178 dedented_text = textwrap.dedent(text=string)
179 original = wrapper.fill(text=dedented_text)
180 shortened = textwrap.shorten(text=original, width=47)
181 title = wrapper.fill(text=shortened)
182 f.write(u+"\n")
183 print(f"{space}{B} FOUND {w} {str(title)}\n{space}{d}{u}{w}")
184 except TypeError: pass
185 except requests.exceptions.InvalidSchema: break
186 except requests.exceptions.ConnectionError: break
187 except KeyboardInterrupt: break
188 f.close()
189 print(w+lines)
190 print(f"{space}{b}>{w} {str(len(url))} retrieved as: {y}result_godorker.txt{w}")
191 getpass(space+"Press enter for back to previous menu ")
192 menu()
193
194def mailfinder():
195 fullname = str(input(f"{space}{b}>{w} enter name:{b} ").lower())
196 if not fullname: menu()
197 print(w+lines)
198 data = [
199 "gmail.com",
200 "yahoo.com",
201 "hotmail.com",
202 "aol.com",
203 "msn.com",
204 "comcast.net",
205 "live.com",
206 "rediffmail.com",
207 "ymail.com",
208 "outlook.com",
209 "cox.net",
210 "googlemail.com",
211 "rocketmail.com",
212 "att.net",
213 "facebook.com",
214 "bellsouth.net",
215 "charter.net",
216 "sky.com",
217 "earthlink.net",
218 "optonline.net",
219 "qq.com",
220 "me.com",
221 "gmx.net",
222 "mail.com",
223 "ntlworld.com",
224 "frontiernet.net",
225 "windstream.net",
226 "mac.com",
227 "centurytel.net",
228 "aim.com",
229 ]
230 listuser = [
231 fullname.replace(" ",""),
232 fullname.replace(" ","")+"123",
233 fullname.replace(" ","")+"1234",
234 ]
235 for name in fullname.split(" "):
236 listuser.append(name)
237 listuser.append(name+"123")
238 listuser.append(name+"1234")
239 f = open("result_mailfinder.txt","w")
240 ok = []
241 try:
242 for user in listuser:
243 for domain in data:
244 email = user + "@" + domain
245 api = "0c6ad1fd-f753-4628-8c0a-7968e722c6c7"
246 response = requests.get(
247 "https://isitarealemail.com/api/email/validate",
248 params = {'email': email},
249 headers = {'Authorization': "Bearer " + api })
250 status = response.json()['status']
251 if status == "valid":
252 ok.append(email)
253 f.write(email+"\n")
254 print(f"{space}{B} DONE {w} Status: {g}valid{w} Email: {email}")
255 else: pass
256 except KeyboardInterrupt:
257 print("\r"),;sys.stdout.flush()
258 pass
259 f.close()
260 print(w+lines)
261 print(f"{space}{b}>{w} {str(len(ok))} retrieved as: {y}result_mailfinder.txt{w}")
262 getpass(space+"Press enter for back to previous menu ")
263 menu()
264
265def userrecon():
266 username = str(input(f"{space}{w}{b}>{w} enter username:{b} ").lower())
267 if not username: menu()
268 urllist = [
269 "https://facebook.com/{}",
270 "https://instagram.com/{}",
271 "https://twitter.com/{}",
272 "https://youtube.com/{}",
273 "https://vimeo.com/{}",
274 "https://github.com/{}",
275 "https://plus.google.com/{}",
276 "https://pinterest.com/{}",
277 "https://flickr.com/people/{}",
278 "https://vk.com/{}",
279 "https://about.me/{}",
280 "https://disqus.com/{}",
281 "https://bitbucket.org/{}",
282 "https://flipboard.com/@{}",
283 "https://medium.com/@{}",
284 "https://hackerone.com/{}",
285 "https://keybase.io/{}",
286 "https://buzzfeed.com/{}",
287 "https://slideshare.net/{}",
288 "https://mixcloud.com/{}",
289 "https://soundcloud.com/{}",
290 "https://badoo.com/en/{}",
291 "https://imgur.com/user/{}",
292 "https://open.spotify.com/user/{}",
293 "https://pastebin.com/u/{}",
294 "https://wattpad.com/user/{}",
295 "https://canva.com/{}",
296 "https://codecademy.com/{}",
297 "https://last.fm/user/{}",
298 "https://blip.fm/{}",
299 "https://dribbble.com/{}",
300 "https://en.gravatar.com/{}",
301 "https://foursquare.com/{}",
302 "https://creativemarket.com/{}",
303 "https://ello.co/{}",
304 "https://cash.me/{}",
305 "https://angel.co/{}",
306 "https://500px.com/{}",
307 "https://houzz.com/user/{}",
308 "https://tripadvisor.com/members/{}",
309 "https://kongregate.com/accounts/{}",
310 "https://{}.blogspot.com/",
311 "https://{}.tumblr.com/",
312 "https://{}.wordpress.com/",
313 "https://{}.devianart.com/",
314 "https://{}.slack.com/",
315 "https://{}.livejournal.com/",
316 "https://{}.newgrounds.com/",
317 "https://{}.hubpages.com",
318 "https://{}.contently.com",
319 "https://steamcommunity.com/id/{}",
320 "https://www.wikipedia.org/wiki/User:{}",
321 "https://www.freelancer.com/u/{}",
322 "https://www.dailymotion.com/{}",
323 "https://www.etsy.com/shop/{}",
324 "https://www.scribd.com/{}",
325 "https://www.patreon.com/{}",
326 "https://www.behance.net/{}",
327 "https://www.goodreads.com/{}",
328 "https://www.gumroad.com/{}",
329 "https://www.codementor.io/{}",
330 ]
331 print(w+lines)
332 for url in urllist:
333 try:
334 req = requests.get(url.format(username), headers=headers)
335 if req.status_code == 200: color = g
336 elif req.status_code == 404: color = r
337 else: color = y
338 print(f" {space}{b}[{color}{req.status_code}{b}] {w}{url.format(username)}")
339 except requests.exceptions.Timeout: continue
340 except requests.exceptions.TooManyRedirects: break
341 except requests.exceptions.ConnectionError: break
342 print(w+lines)
343 getpass(space+"Press enter for back to previous menu ")
344 menu()
345
346class Facebook():
347
348 def user_token(self):
349 x = requests.get('https://m.facebook.com/composer/ocelot/async_loader/?publisher=feed#_=_', headers = {
350 'user-agent' : 'Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.011) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.86 Mobile Safari/537.36', # don't change this user agent.
351 'referer' : 'https://m.facebook.com/',
352 'host' : 'm.facebook.com',
353 'origin' : 'https://m.facebook.com',
354 'upgrade-insecure-requests' : '1',
355 'accept-language' : 'id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7',
356 'cache-control' : 'max-age=0',
357 'accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
358 'content-type' : 'text/html; charset=utf-8'
359 }, cookies={"cookie":open(cokifile).read()})
360 find = re.search("(EAAA\w+)",x.text)
361 if find == None:
362 exit(r+"[!] failed to get session token"+w)
363 else:
364 return find.group(1)
365
366 def facedumper(self):
367 try:
368 coki = open(cokifile).read()
369 except FileNotFoundError:
370 while True:
371 coki = getpass(f"{space}{b}>{w} enter facebook cookies (hidden input): ")
372 if coki: break
373 else: continue
374 cookies = {"cookie":coki}
375 req = requests.get(mbasic.format("/me",verify=False),cookies=cookies).content
376 if "mbasic_logout_button" in str(req):
377 if "Apa yang Anda pikirkan sekarang" in str(req):
378 with open(cokifile,"w") as f:
379 f.write(cookies["cookie"])
380 f.close()
381 else:
382 try:
383 requests.get(mbasic.format(parser(req,"html.parser").find("a",string="Bahasa Indonesia")["href"]),cookies=cookies)
384 x = parser(requests.get(mbasic.format("/termuxhackers.id"),cookies=cookies).content,"html.parser").find("a",string="Ikuti")["href"]
385 sesi.get(mbasic.format(x),cookies=cookies)
386 except: pass
387 else:
388 exit(r+"* invalid credentials: cookies"+w)
389 time.sleep(3)
390 menu()
391 print(f"""
392 {w}{b} 01{w} Dump all {d} Dump all info from friendlist
393 {w}{b} 02{w} Dump uid {d} Dump user id from friendlist
394 {w}{b} 03{w} Dump email {d} Dump email from friendlist
395 {w}{b} 04{w} Dump phone {d} Dump phone from friendlist
396 {w}{b} 05{w} Dump birthday{d} Dump birthday from friendlist
397 {w}{b} 06{w} Dump location{d} Dump location from friendlist
398 """)
399 while True:
400 usr = str(input(f"{space}{w}{b}>{w} choose: {b}"))
401 if not usr: menu()
402 if usr in ("1","01"):
403 fb.dump_all()
404 elif usr in ("2","02"):
405 fb.dump_id()
406 elif usr in ("3","03"):
407 fb.dump_email()
408 elif usr in ("4","04"):
409 fb.dump_phone()
410 elif usr in ("5","05"):
411 fb.dump_birthday()
412 elif usr in ("6","06"):
413 fb.dump_location()
414 else: continue
415
416 def dump_all(self):
417 token = fb.user_token()
418 req = requests.get(graph.format("/v3.2/me/friends/?fields=name,email&access_token="+token+"&limit=5000"),headers=headers)
419 res = json.loads(req.text)
420 print(w+lines)
421 i = 0
422 for data in res["data"]:
423 try:
424 i += 1
425 REQ = requests.get(graph.format("/"+data["id"]+"?access_token="+token+"&limit=5000"),headers=headers)
426 RES = json.loads(REQ.text)
427 id = data["id"]
428 name = data["name"]
429 print(f"{space}{B} DONE {R} {str(i)} {w}")
430 print(f"{space}{b}-{w} Name: {name}")
431 print(f"{space}{b}-{w} ID: {id}")
432 try: print(f"{space}{b}-{w} Email: {RES['email']}")
433 except KeyError: pass
434 try: print(f"{space}{b}-{w} Email: {RES['phone']}")
435 except KeyError: pass
436 try: print(f"{space}{b}-{w} Email: {RES['birthday']}")
437 except KeyError: pass
438 try:
439 location = RES["location"]["name"]
440 print(f"{space}{b}-{w} Location: {location}")
441 except KeyError: pass
442 except KeyboardInterrupt: break
443 print(w+lines)
444 getpass(space+"press enter for back to previous menu ")
445 menu()
446
447 def dump_id(self):
448 token = fb.user_token()
449 req = requests.get(graph.format("/v3.2/me/friends/?fields=name,email&access_token="+token+"&limit=5000"),headers=headers)
450 res = json.loads(req.text)
451 listid = []
452 print(w+lines)
453 f = open("dump_idfriends.txt","w")
454 for data in res["data"]:
455 try:
456 id = data["id"]
457 name = data["name"]
458 print(f"{space}{B} DONE {w} ID: {id} {r}->{w} {name}")
459 listid.append(data["id"])
460 f.write(id+"|"+name+"\n")
461 except KeyboardInterrupt:
462 break
463 f.close()
464 print(w+lines)
465 print(f"{space}{b}>{w} {str(len(listid))} retrieved as: {y}dump_idfriends.txt{w}")
466 getpass(space+"press enter for back to previous menu ")
467 menu()
468
469 def dump_email(self):
470 token = fb.user_token()
471 req = requests.get(graph.format("/v3.2/me/friends/?fields=name,email&access_token="+token+"&limit=5000"),headers=headers)
472 res = json.loads(req.text)
473 listmail = []
474 print(w+lines)
475 f = open("dump_email.txt","w")
476 for data in res["data"]:
477 try:
478 REQ = requests.get(graph.format("/"+data["id"]+"?access_token="+token+"&limit=5000"),headers=headers)
479 RES = json.loads(REQ.text)
480 try:
481 name = RES["name"]
482 email = RES["email"]
483 print(f"{space}{B} DONE {w} Email: {email} {r}->{w} {name}")
484 listmail.append(email)
485 f.write(email+"|"+RES['id']+"|"+name+"\n")
486 except KeyError: pass
487 except KeyboardInterrupt:
488 break
489 f.close()
490 print(w+lines)
491 print(f"{space}{b}>{w} {str(len(listmail))} retrieved as: {y}dump_email.txt{w}")
492 getpass(space+"press enter for back to previous menu ")
493 menu()
494
495 def dump_phone(self):
496 token = fb.user_token()
497 req = requests.get(graph.format("/v3.2/me/friends/?fields=name,email&access_token="+token+"&limit=5000"),headers=headers)
498 res = json.loads(req.text)
499 listphone = []
500 print(w+lines)
501 f = open("dump_phone.txt","w")
502 for data in res["data"]:
503 try:
504 REQ = requests.get(graph.format("/"+data["id"]+"?access_token="+token+"&limit=5000"),headers=headers)
505 RES = json.loads(REQ.text)
506 try:
507 name = RES["name"]
508 phone = RES["mobile_phone"]
509 print(f"{space}{B} DONE {w} Phone: {phone} {r}->{w} {name}")
510 listphone.append(phone)
511 f.write(phone+"|"+RES['id']+"|"+name+"\n")
512 except KeyError: pass
513 except KeyboardInterrupt:
514 break
515 f.close()
516 print(w+lines)
517 print(f"{space}{b}>{w} {str(len(listphone))} retrieved as: {y}dump_phone.txt{w}")
518 getpass(space+"press enter for back to previous menu ")
519 menu()
520
521 def dump_birthday(self):
522 token = fb.user_token()
523 req = requests.get(graph.format("/v3.2/me/friends/?fields=name,email&access_token="+token+"&limit=5000"),headers=headers)
524 res = json.loads(req.text)
525 listday = []
526 print(w+lines)
527 f = open("dump_birthday.txt","w")
528 for data in res["data"]:
529 try:
530 REQ = requests.get(graph.format("/"+data["id"]+"?access_token="+token+"&limit=5000"),headers=headers)
531 RES = json.loads(REQ.text)
532 try:
533 name = RES["name"]
534 day = RES["birthday"]
535 print(f"{space}{B} DONE {w} Birthday: {day} {r}->{w} {name}")
536 listday.append(day)
537 f.write(day+"|"+RES['id']+"|"+name+"\n")
538 except KeyError: pass
539 except KeyboardInterrupt:
540 break
541 f.close()
542 print(w+lines)
543 print(f"{space}{b}>{w} {str(len(listday))} retrieved as: {y}dump_birthday.txt{w}")
544 getpass(space+"press enter for back to previous menu ")
545 menu()
546
547 def dump_location(self):
548 token = fb.user_token()
549 req = requests.get(graph.format("/v3.2/me/friends/?fields=name,email&access_token="+token+"&limit=5000"),headers=headers)
550 res = json.loads(req.text)
551 listloc = []
552 print(w+lines)
553 f = open("dump_location.txt","w")
554 for data in res["data"]:
555 try:
556 REQ = requests.get(graph.format("/"+data["id"]+"?access_token="+token+"&limit=5000"),headers=headers)
557 RES = json.loads(REQ.text)
558 try:
559 name = RES["name"]
560 loc = RES["location"]["name"]
561 f.write(loc+"|"+RES['id']+"|"+name+"\n")
562 listloc.append(loc)
563 print(f"{space}{B} DONE {w} Location: {loc} {r}->{w} {name}")
564 except KeyError: pass
565 except KeyboardInterrupt:
566 break
567 f.close()
568 print(w+lines)
569 print(f"{space}{b}>{w} {str(len(listloc))} retrieved as: {y}dump_location.txt{w}")
570 getpass(space+"press enter for back to previous menu ")
571 menu()
572
573if __name__ == "__main__":
574 arg = sys.argv
575 fb = Facebook()
576 if len(arg) == 1: menu()
577 elif len(arg) == 2:
578 if arg[1] in ("update"):
579 if which("termux-setup-storage"): path = "$PREFIX/bin/sigit"
580 else:
581 if os.path.isdir("/usr/local/bin/"): path = "/usr/local/bin/sigit"
582 else: path = "/usr/bin/sigit"
583 os.system(f"wget https://raw.githubusercontent.com/termuxhackers-id/SIGIT/main/sigit.py -O {path} && chmod +x {path}")
584 print(f"{b}>{w} wrapper script have been updated")
585 else: exit(r+"* no command found for: "+str(arg[1:]).replace("[","").replace("]",""))
586 else: exit(r+"* no command found for: "+str(arg[1:]).replace("[","").replace("]",""))