More UI functionality
This commit is contained in:
parent
ae230af4fc
commit
f64ff86d83
3
auth.py
3
auth.py
@ -9,11 +9,12 @@ def login(config, user, password, sysid):
|
||||
fprint("Attempting to login as " + user)
|
||||
filename = sysid + "login.csv"
|
||||
|
||||
hashpasswd = bcrypt.hashpw(password.encode('utf-8'), user).decode()
|
||||
#hashpasswd = bcrypt.hashpw(password.encode('utf-8'), user).decode()
|
||||
with open(find_data_file(filename), "w", newline="") as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerows([[user,password,sysid],])
|
||||
fprint("done creating csv")
|
||||
#return True
|
||||
ssh.sftp_send_data(config, filename, 'sendlogin')
|
||||
command = "python3 login_service.py " + sysid
|
||||
ssh.run_ssh(config, command, 'scripts')
|
||||
|
39
block.py
39
block.py
@ -20,32 +20,53 @@ def get_blocklist(config):
|
||||
for row in csvreader:
|
||||
data2.append(row)
|
||||
data2 = [i for i in data2 if i]
|
||||
#fprint(data2)
|
||||
data2.append(["N/A", "N/A", "N/A", "N/A", "100.115.71.78", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"])
|
||||
fprint(data2)
|
||||
with open(find_data_file("blocklist.csv"), "w", newline="") as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerows(data2)
|
||||
fprint("done creating csv")
|
||||
return data2
|
||||
|
||||
def block_conn(config, datafile, res):
|
||||
setup_child()
|
||||
fprint("Searching block data")
|
||||
mydata = list()
|
||||
badapps = list()
|
||||
with open(find_data_file(datafile), newline='') as csvfile:
|
||||
csvreader = csv.reader(csvfile, delimiter=',', quotechar='|')
|
||||
|
||||
for row in csvreader:
|
||||
mydata.append(row)
|
||||
|
||||
baddata = res
|
||||
fprint("Local loaded successfully")
|
||||
|
||||
#fprint(mydata)
|
||||
for line in mydata:
|
||||
fprint(line)
|
||||
fprint(line)
|
||||
#fprint(line)
|
||||
#fprint(line)
|
||||
if line[0].find("0x") >= 0:
|
||||
continue
|
||||
|
||||
srcip = line[2].split(":")[0]
|
||||
destip = line[4].split(":")[0]
|
||||
destip = line[3].split(":")[0]
|
||||
pid = line[5]
|
||||
for line in res:
|
||||
fprint(line)
|
||||
try:
|
||||
pid = int(pid)
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
for line in baddata:
|
||||
#fprint(destip + " " + line[4])
|
||||
badsrcip = line[2]
|
||||
baddestip = line[4]
|
||||
badpid = line[11]
|
||||
if srcip == badsrcip or destip == baddestip:
|
||||
fprint("FLAG " + srcip + " " + destip + " " + pid)
|
||||
kill(pid)
|
||||
|
||||
if srcip == badsrcip or destip == baddestip and not pid in badapps:
|
||||
fprint("FLAG " + srcip + " " + destip + " " + str(pid))
|
||||
badapps.append(pid)
|
||||
#fprint(badapps)
|
||||
#fprint("FLAG " + srcip + " " + destip + " " + str(pid))
|
||||
#kill(pid)
|
||||
return badapps
|
||||
|
40
ippigeon.py
40
ippigeon.py
@ -8,6 +8,7 @@ import uuid
|
||||
import yaml
|
||||
from util import find_data_file
|
||||
from util import fprint
|
||||
from util import kill
|
||||
import taskbartool
|
||||
import util
|
||||
import netstat
|
||||
@ -17,6 +18,7 @@ import panel
|
||||
import block
|
||||
|
||||
badapps = [756, 278670]
|
||||
badips = ["208.59.79.12",]
|
||||
displaydata = None
|
||||
settings = None
|
||||
netdata_res = None
|
||||
@ -63,7 +65,10 @@ def netstat_done(res):
|
||||
def process_done(res):
|
||||
fprint("uploading to sftp...")
|
||||
#ssh.sftp_send_data(res, config, datafile)
|
||||
procdata_res = pool.apply_async(ssh.sftp_send_data, (config, datafile, 'send'))
|
||||
procdata_res = pool.apply_async(ssh.sftp_send_data, (config, datafile, 'send'), callback=upload_done)
|
||||
|
||||
def upload_done(res):
|
||||
settings["block"] = True
|
||||
|
||||
def login_done(res):
|
||||
if not res:
|
||||
@ -75,10 +80,18 @@ def login_done(res):
|
||||
settings["continueui"] = True
|
||||
|
||||
def blockdata_done(res):
|
||||
global settings
|
||||
fprint("FINISHED downloading block data")
|
||||
#block_res = pool.apply_async(block.block_conn, (config, datafile, res))
|
||||
block.block_conn(config, datafile, res)
|
||||
#block_res = pool.apply_async(block.block_conn, (config, datafile, res, settings))
|
||||
block_res = block.block_conn(config, datafile, res)
|
||||
tmplist = settings["badapps"]
|
||||
for x in block_res:
|
||||
fprint(x)
|
||||
if not x in tmplist:
|
||||
tmplist.append(x)
|
||||
|
||||
settings["badapps"] = tmplist
|
||||
fprint(settings["badapps"])
|
||||
|
||||
def killall():
|
||||
kids = active_children()
|
||||
@ -104,7 +117,7 @@ def mainloop(pool):
|
||||
killall()
|
||||
#print(res.get(timeout=1))
|
||||
if counter == 0: # runs every INTERVAL
|
||||
fprint("start loop")
|
||||
#fprint("start loop")
|
||||
if netdata_res is None or netdata_res.ready():
|
||||
#rawdata = netdata_res.get()
|
||||
#procdata_res = pool.apply_async(process_netstat, (rawdata))
|
||||
@ -138,12 +151,10 @@ def mainloop(pool):
|
||||
#block.get_blocklist(config)
|
||||
settings["block"] = False
|
||||
|
||||
#fprint(settings["killbox"])
|
||||
if len(settings["killbox"]) > 0:
|
||||
fprint("Kill opportunity!")
|
||||
for proc in settings["killbox"]:
|
||||
pool.apply_async(kill, (proc,))
|
||||
settings["killbox"].remove(proc)
|
||||
if settings["kill"] == True:
|
||||
for x in settings["badapps"]:
|
||||
kill(x)
|
||||
settings["badapps"] = list()
|
||||
|
||||
sleep(interval / (interval * config["core"]["clockspeed"]))
|
||||
counter += 1
|
||||
@ -175,9 +186,9 @@ if __name__ == '__main__':
|
||||
|
||||
sys.stdout = Logger(filename=find_data_file("output.log"))
|
||||
sys.stderr = Logger(filename=find_data_file("output.log"))
|
||||
with Manager() as manager:
|
||||
with Pool(processes=5) as pool:
|
||||
|
||||
with Pool(processes=5) as pool:
|
||||
with Manager() as manager:
|
||||
with open(find_data_file('config.yml'), 'r') as file:
|
||||
#global config
|
||||
config = yaml.safe_load(file)
|
||||
@ -190,8 +201,9 @@ if __name__ == '__main__':
|
||||
settings["showui"] = False
|
||||
settings["continueui"] = False
|
||||
settings["killbox"] = list()
|
||||
settings["badapps"] = badapps
|
||||
settings["block"] = True
|
||||
settings["badapps"] = list()
|
||||
settings["block"] = False
|
||||
settings["kill"] = False
|
||||
killme = manager.Value('d', 0)
|
||||
#killme = False
|
||||
# launch background UI app as process
|
||||
|
594715
output.log
594715
output.log
File diff suppressed because one or more lines are too long
110
panel.py
110
panel.py
@ -11,7 +11,7 @@ from util import find_data_file
|
||||
BG_IMG = 'icon.png'
|
||||
filename = sysid + "gendata.csv"
|
||||
COLUMN_NAMES = np.flip(['Executable', 'Proto', 'Source IP', 'Destination IP', 'Status', 'PID'])
|
||||
COLUMN_SIZES = np.flip([150, 50, 200, 200, 110, 65])
|
||||
COLUMN_SIZES = np.flip([200, 50, 200, 200, 140, 100])
|
||||
TEST_FILE = None
|
||||
|
||||
displaydata = None
|
||||
@ -19,12 +19,26 @@ settings = None
|
||||
|
||||
killme = False
|
||||
|
||||
def loaddata():
|
||||
global TEST_FILE
|
||||
try:
|
||||
TEST_FILE = pd.read_csv(find_data_file(filename), skiprows=1)
|
||||
TEST_FILE = TEST_FILE.iloc[1:, :]
|
||||
TEST_FILE.columns = ['Executable', 'Protocol', 'Source IP', 'Destination IP', 'Status', 'PID']
|
||||
#fprint(TEST_FILE)
|
||||
#fprint(len(TEST_FILE))
|
||||
#fprint(TEST_FILE.iloc[1, 1])
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
class OtherFrame(wx.Frame):
|
||||
"""
|
||||
Class used for creating frames other than the main one
|
||||
"""
|
||||
def __init__(self):
|
||||
wx.Frame.__init__(self, None, -1, 'Server Panel', size=(600, 250))
|
||||
wx.Frame.__init__(self, None, -1, 'Server Panel', size=(1000, 700))
|
||||
panel = ServerPanel(self)
|
||||
self.Show()
|
||||
|
||||
@ -122,12 +136,11 @@ class ServerPanel(wx.Panel):
|
||||
def __init__(self, parent):
|
||||
super().__init__(parent, size=(500, 500))
|
||||
#self.SetBackgroundColour((44, 51, 51))
|
||||
|
||||
main_sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
|
||||
secondary_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||
self.row_obj_dict = {}
|
||||
self.list_ctrl = wx.ListCtrl(
|
||||
self, size=(-1, 200),
|
||||
self, size=(-1, 400),
|
||||
style=wx.LC_REPORT | wx.BORDER_SUNKEN
|
||||
)
|
||||
tb = wx.ToolBar( self, -1)
|
||||
@ -136,52 +149,73 @@ class ServerPanel(wx.Panel):
|
||||
tb.AddTool(wx.ID_ANY, '',wx.Bitmap(find_data_file("WXPython_30x30.png")),)
|
||||
tb.AddTool(wx.ID_ANY, '',wx.Bitmap(find_data_file("settings_30x30.png")))
|
||||
tb.Realize()
|
||||
main_sizer.Add(tb)
|
||||
self.main_sizer.Add(tb)
|
||||
#main_sizer.SetBackgroundColour((44, 51, 51))
|
||||
# self.pnl1.SetBackgroundColour(wx.BLACK)
|
||||
self.handle_columns()
|
||||
global settings
|
||||
for i in range(len(TEST_FILE)):
|
||||
self.list_ctrl.InsertItem(i, TEST_FILE.iloc[i, 0])
|
||||
#fprint(TEST_FILE.iloc[i, 5] + " in " + str(settings["badapps"]))
|
||||
#if TEST_FILE.iloc[i, 5] in settings["badapps"]:
|
||||
for pid in settings["badapps"]:
|
||||
#fprint(pid)
|
||||
if str(TEST_FILE.iloc[i, 5]) == str(pid):
|
||||
#fprint("Got " + TEST_FILE.iloc[i, 5])
|
||||
settings["killbox"].append(pid)
|
||||
fprint(settings["killbox"])
|
||||
self.list_ctrl.SetItemBackgroundColour(i, wx.Colour(200, 51, 51))
|
||||
for j in range(1, 6):
|
||||
self.list_ctrl.SetItem(i, j, str(TEST_FILE.iloc[i, j]))
|
||||
#self.updatedata()
|
||||
wx.CallAfter(self.updatedata)
|
||||
|
||||
#fprint(i, j, TEST_FILE.iloc[i, j])
|
||||
|
||||
main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
|
||||
wx.GetApp().ProcessPendingEvents()
|
||||
self.main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
|
||||
start_button = wx.Button(self, label='Start')
|
||||
start_button.SetBackgroundColour((205, 215, 206))
|
||||
start_button.Bind(wx.EVT_BUTTON, self.on_edit)
|
||||
start_button.Bind(wx.EVT_ENTER_WINDOW, self.on_edit)
|
||||
start_button.Bind(wx.EVT_BUTTON, self.on_start)
|
||||
#start_button.Bind(wx.EVT_ENTER_WINDOW, self.on_start)
|
||||
stop_button = wx.Button(self, label='Stop')
|
||||
stop_button.SetBackgroundColour('#F08080')
|
||||
|
||||
secondary_frame_button = wx.Button(self, label='Window')
|
||||
secondary_frame_button.Bind(wx.EVT_BUTTON, self.on_window)
|
||||
# wx.BORDER(stop_button, wx.BORDER_NONE)
|
||||
stop_button.Bind(wx.EVT_BUTTON, self.on_edit)
|
||||
main_sizer.Add(start_button, 0, wx.CENTER | wx.ALL | 100, 5)
|
||||
main_sizer.Add(stop_button, 0, wx.CENTER | wx.ALL | 100, 5)
|
||||
main_sizer.Add(secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5)
|
||||
self.SetSizer(main_sizer)
|
||||
stop_button.Bind(wx.EVT_BUTTON, self.on_stop)
|
||||
self.main_sizer.Add(start_button, 0, wx.CENTER | wx.ALL | 100, 5)
|
||||
self.main_sizer.Add(stop_button, 0, wx.CENTER | wx.ALL | 100, 5)
|
||||
self.main_sizer.Add(secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5)
|
||||
self.SetSizer(self.main_sizer)
|
||||
|
||||
def handle_columns(self):
|
||||
for col in range(len(COLUMN_NAMES)):
|
||||
self.list_ctrl.InsertColumn(0, COLUMN_NAMES[col], width=COLUMN_SIZES[col])
|
||||
|
||||
def updatedata(self):
|
||||
fprint("updatedata called")
|
||||
loaddata()
|
||||
global settings
|
||||
if self.list_ctrl.DeleteAllItems():
|
||||
fprint("Items deleted")
|
||||
else:
|
||||
fprint("Unable to delete")
|
||||
for i in range(len(TEST_FILE)):
|
||||
idx = 0
|
||||
for pid in settings["badapps"]:
|
||||
#fprint(pid)
|
||||
idx = i
|
||||
if str(TEST_FILE.iloc[i, 5]) == str(pid): # "bad" pid, highlight in red at the top
|
||||
idx = self.list_ctrl.InsertItem(0, TEST_FILE.iloc[i, 0])
|
||||
self.list_ctrl.SetItemBackgroundColour(idx, wx.Colour(200, 51, 51))
|
||||
break
|
||||
else:
|
||||
idx = self.list_ctrl.InsertItem(i, TEST_FILE.iloc[i, 0])
|
||||
#fprint(TEST_FILE.iloc[i, 5] + " in " + str(settings["badapps"]))
|
||||
#if TEST_FILE.iloc[i, 5] in settings["badapps"]:
|
||||
|
||||
#fprint("Got " + TEST_FILE.iloc[i, 5])
|
||||
for j in range(1, 6):
|
||||
fprint(str(idx) + " " + str(TEST_FILE.iloc[i, 0]))
|
||||
self.list_ctrl.SetItem(idx, j, str(TEST_FILE.iloc[idx, j]))
|
||||
|
||||
def on_edit(self, event):
|
||||
fprint('in on_edit')
|
||||
#fprint(i, j, TEST_FILE.iloc[i, j])
|
||||
#self.SetSizer(self.main_sizer)
|
||||
wx.CallLater(5000, self.updatedata)
|
||||
|
||||
def on_start(self, event):
|
||||
fprint('in on_start')
|
||||
settings["kill"] = True
|
||||
|
||||
def on_stop(self, event):
|
||||
fprint('in on_stop')
|
||||
settings["kill"] = False
|
||||
|
||||
def on_window(self, event):
|
||||
OtherFrame()
|
||||
@ -194,6 +228,7 @@ class ServerPanel(wx.Panel):
|
||||
self.bitmap = wx.StaticBitmap(self, -1, bmp, (0, 0))
|
||||
|
||||
|
||||
|
||||
class ServerFrame(wx.Frame):
|
||||
def __init__(self):
|
||||
super().__init__(parent=None,
|
||||
@ -214,16 +249,7 @@ def openwindow(data, sets, kill):
|
||||
settings = sets
|
||||
if settings["loggedin"]:
|
||||
fprint("Creating server panel")
|
||||
global TEST_FILE
|
||||
try:
|
||||
TEST_FILE = pd.read_csv(find_data_file(filename), skiprows=1)
|
||||
TEST_FILE = TEST_FILE.iloc[1:, :]
|
||||
TEST_FILE.columns = ['Executable', 'Protocol', 'Source IP', 'Destination IP', 'Status', 'PID']
|
||||
fprint(TEST_FILE)
|
||||
fprint(len(TEST_FILE))
|
||||
#fprint(TEST_FILE.iloc[1, 1])
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
loaddata()
|
||||
app = wx.App(False)
|
||||
frame = OtherFrame()
|
||||
app.MainLoop()
|
||||
|
Loading…
x
Reference in New Issue
Block a user