More UI functionality

formac
Cole Deck 2 years ago
parent ae230af4fc
commit f64ff86d83

@ -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')

@ -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

@ -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 Pool(processes=5) as pool:
with Manager() as manager:
with Pool(processes=5) as pool:
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

File diff suppressed because one or more lines are too long

@ -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]))
#fprint(i, j, TEST_FILE.iloc[i, j])
#self.updatedata()
wx.CallAfter(self.updatedata)
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()

@ -43,7 +43,7 @@ def time():
def kill(pid):
setup_child()
fprint("Killing PID " + str(pid))
os.kill(pid, 9)
os.kill(int(pid), 9)
fprint("Signal 9 sent to PID " + str(pid))
def fprint(msg):

Loading…
Cancel
Save