-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathmain.py
92 lines (74 loc) · 2.16 KB
/
main.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
import os
import sys
from base64 import b64encode
from utils.db import JsonDB
from utils.status import *
import utils.multitask as multitask
import utils.console as console
targets = [x.strip() for x in open(console.args.file,"r").readlines() if x.strip()]
dir_target = os.path.dirname(os.path.realpath(console.args.file))
os.chdir(sys.path[0])
import utils.data as data
import plugins
import scripts
import signal
console.banner( len(plugins.loader.loaded) )
os.chdir(dir_target)
channels = {}
db = JsonDB(console.args.db)
def onexit(sig,frame):
for plugin in plugins.loader.loaded:
try:
channels[plugin].close()
except:
pass
os._exit(0)
def dbsave(result):
res = result.ret
host = result.args[0]
name = result.channel.name
if result.ret == None: return
console.pprint(result)
if name not in db.data: db.data[name] = {}
db.data[name].update({
host:{
'status' : res.status,
'msg' : res.msg,
'response': data.compress(res.response),
'request' : data.compress(res.request)
}
})
db.save()
def scan(host):
for plugin in plugins.loader.loaded:
if not plugin.enable or not plugin.presquites(host):
continue
channels[plugin].append(host)
signal.signal(signal.SIGINT, onexit)
console.output(LOG, "checking live targets")
if console.args.ping:
scripts.ping(targets,silent=False)
else:
scripts.ping(targets,silent=True)
console.output(LOG, "preformed in-memory save for online targets")
for plugin in plugins.loader.loaded:
channel = multitask.Channel(plugin.name)
channels.update({
plugin: channel
})
multitask.workers(
target = plugin.main,
channel = channel,
count = console.args.workers,
callback = dbsave
)
queue = multitask.Channel('scan-queue')
multitask.workers(target=scan,channel=queue,count=console.args.workers)
for target in targets:
queue.append(target)
queue.wait()
queue.close()
for plugin in plugins.loader.loaded:
channels[plugin].wait()
for plugin in plugins.loader.loaded:
channels[plugin].close()