add macos initial support, ui changes

testing 1668561961
Cole Deck 2 years ago
parent 57de86f410
commit e496e6c4c5

@ -1,7 +1,7 @@
core: core:
autostart: true autostart: true
clockspeed: 20 clockspeed: 20
interval: 10 interval: 5
level: 2 level: 2
localadmin: true localadmin: true
sftp: sftp:

@ -48,7 +48,7 @@ if win32:
_, username = res.strip().rsplit("\n", 1) _, username = res.strip().rsplit("\n", 1)
userid, sysdom = username.rsplit("\\", 1) userid, sysdom = username.rsplit("\\", 1)
if linux: if linux or macos:
sysid = hex(uuid.getnode()) sysid = hex(uuid.getnode())
#fprint(sysid) #fprint(sysid)
datafile += sysid datafile += sysid
@ -154,11 +154,11 @@ def mainloop(pool):
if settings["continueui"] == True: if settings["continueui"] == True:
settings["continueui"] = False settings["continueui"] = False
if ppanel is not None: #if ppanel is not None:
# login panel is already open # login panel is already open
ppanel.terminate() # ppanel.terminate()
ppanel = Process(target=panel.openwindow, args=(displaydata,settings,killme)) # ppanel = Process(target=panel.openwindow, args=(displaydata,settings,killme))
ppanel.start() # ppanel.start()
if settings["showui"] == True: if settings["showui"] == True:
settings["showui"] = False settings["showui"] = False

@ -4,6 +4,7 @@ from util import fprint
from util import run_cmd from util import run_cmd
from util import win32 from util import win32
from util import linux from util import linux
from util import macos
import util import util
import time import time
import csv import csv
@ -107,6 +108,44 @@ def process(data):
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(output2) writer.writerows(output2)
fprint("done creating csv") fprint("done creating csv")
if macos:
output = data.stdout.decode().split('\n') # split stdout into lines
#output = data.stdout.decode().split(',')
#fprint("output data: " + str(output))
output = [i for i in output if i]
if output[0].find("Not all processes could be identified") >= 0:
fprint("Not enough permissions")
raise PermissionError("Unable to acquire netstat data without admin!")
output2 = list()
output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata
for line in output:
string_split = line.split(" ")
string_split = [i for i in string_split if i]
#fprint("Input: " + str(string_split))
if string_split[1].find("Multipath") >= 0:
break
if string_split[0].find("Active") >= 0 or string_split[0].find("Proto") >= 0:
continue
if len(string_split) == 10: # no connection status
#fprint(string_split)
string_split.append(string_split[-1])
string_split[-7] = "UNKNOWN"
string_split[-4] = string_split[-5]
#fprint(string_split)
output2.append(["Unknown", string_split[0], string_split[3], string_split[4], string_split[5], string_split[8]])
#fprint("FINAL CSV: " + str(output2))
with open(find_data_file(util.datafile), "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(output2)
fprint("done creating csv")
def start(): def start():
@ -123,3 +162,8 @@ def start():
fprint("data acquired") fprint("data acquired")
return data return data
if macos:
data = run_cmd("netstat -anv")
fprint("data acquired")
return data

@ -40,7 +40,7 @@ class OtherFrame(wx.Frame):
Class used for creating frames other than the main one Class used for creating frames other than the main one
""" """
def __init__(self): def __init__(self):
wx.Frame.__init__(self, None, -1, 'Server Panel', size=(1000, 620)) wx.Frame.__init__(self, None, -1, 'Server Panel', size=(1000, 675))
panel = ServerPanel(self) panel = ServerPanel(self)
self.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO)) self.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
@ -101,6 +101,9 @@ class LoginPanel(wx.Panel):
settings["username"] = basicText.GetValue() settings["username"] = basicText.GetValue()
settings["password"] = pwdText.GetValue() settings["password"] = pwdText.GetValue()
settings["login"] = True settings["login"] = True
#self.Destroy()
self.Close()
self.Parent.Close()
#OtherFrame() #OtherFrame()
def on_help(self, event): def on_help(self, event):
@ -142,7 +145,9 @@ class ServerPanel(wx.Panel):
super().__init__(parent, size=(500, 500)) super().__init__(parent, size=(500, 500))
#self.SetBackgroundColour((44, 51, 51)) #self.SetBackgroundColour((44, 51, 51))
self.main_sizer = wx.BoxSizer(wx.VERTICAL) self.main_sizer = wx.BoxSizer(wx.VERTICAL)
secondary_sizer = wx.BoxSizer(wx.HORIZONTAL) self.secondary_sizer = wx.BoxSizer(wx.HORIZONTAL)
self.sub_sizer_left = wx.BoxSizer(wx.VERTICAL)
self.sub_sizer_right = wx.BoxSizer(wx.VERTICAL)
self.row_obj_dict = {} self.row_obj_dict = {}
self.list_ctrl = wx.ListCtrl( self.list_ctrl = wx.ListCtrl(
self, size=(-1, 400), self, size=(-1, 400),
@ -159,49 +164,81 @@ class ServerPanel(wx.Panel):
else: else:
txt = "Status: Not running" txt = "Status: Not running"
if settings["loggedin"] == True:
logintxt = "Logged in"
else:
logintxt = "Not logged in"
self.statustext = wx.StaticText(self, label=txt) # pos=(20,20)) self.statustext = wx.StaticText(self, label=txt) # pos=(20,20))
self.logintext = wx.StaticText(self, label=logintxt) # pos=(20,20))
#self.main_sizer.Add(tb) #self.main_sizer.Add(tb)
#main_sizer.SetBackgroundColour((44, 51, 51)) #main_sizer.SetBackgroundColour((44, 51, 51))
# self.pnl1.SetBackgroundColour(wx.BLACK) # self.pnl1.SetBackgroundColour(wx.BLACK)
self.handle_columns() self.handle_columns()
#self.updatedata() #self.updatedata()
wx.CallAfter(self.updatedata)
wx.GetApp().ProcessPendingEvents()
self.main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20) self.main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
start_button = wx.Button(self, label='Start IPPigeon') self.main_sizer.Add(self.secondary_sizer, 0, wx.ALL | wx.EXPAND, 20)
start_button.SetBackgroundColour((205, 215, 206)) self.secondary_sizer.Add(self.sub_sizer_left, 0, wx.ALL | wx.CENTER, 20)
start_button.Bind(wx.EVT_BUTTON, self.on_start) self.secondary_sizer.Add(self.sub_sizer_right, 0, wx.ALL | wx.CENTER, 20)
self.start_button = wx.Button(self, label='Start IPPigeon')
self.start_button.SetBackgroundColour((205, 215, 206))
self.start_button.Bind(wx.EVT_BUTTON, self.on_start)
#start_button.Bind(wx.EVT_ENTER_WINDOW, self.on_start) #start_button.Bind(wx.EVT_ENTER_WINDOW, self.on_start)
stop_button = wx.Button(self, label='Stop IPPigeon') self.stop_button = wx.Button(self, label='Stop IPPigeon')
stop_button.SetBackgroundColour('#F08080') self.stop_button.SetBackgroundColour('#F08080')
self.secondary_frame_button = wx.Button(self, label='Settings')
secondary_frame_button = wx.Button(self, label='Settings') self.secondary_frame_button.Bind(wx.EVT_BUTTON, self.on_window)
secondary_frame_button.Bind(wx.EVT_BUTTON, self.on_window)
# wx.BORDER(stop_button, wx.BORDER_NONE) # wx.BORDER(stop_button, wx.BORDER_NONE)
stop_button.Bind(wx.EVT_BUTTON, self.on_stop) self.stop_button.Bind(wx.EVT_BUTTON, self.on_stop)
self.main_sizer.Add(self.statustext, 0, wx.CENTER | wx.ALL | 100, 5)
self.main_sizer.Add(start_button, 0, wx.CENTER | wx.ALL | 100, 5) self.login_button = wx.Button(self, label='Login')
self.main_sizer.Add(stop_button, 0, wx.CENTER | wx.ALL | 100, 5) #self.login_button.SetBackgroundColour((205, 215, 206))
self.main_sizer.Add(secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5) self.login_button.Bind(wx.EVT_BUTTON, self.on_login)
self.sub_sizer_right.Add(self.statustext, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_right.Add(self.logintext, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_left.Add(self.start_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_left.Add(self.stop_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_left.Add(self.secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_right.Add(self.login_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.SetSizer(self.main_sizer) self.SetSizer(self.main_sizer)
self.start_button.Enable(enable=settings["loggedin"])
self.stop_button.Enable(enable=settings["loggedin"])
self.secondary_frame_button.Enable(enable=settings["loggedin"])
wx.CallAfter(self.updatedata)
wx.GetApp().ProcessPendingEvents()
def handle_columns(self): def handle_columns(self):
for col in range(len(COLUMN_NAMES)): for col in range(len(COLUMN_NAMES)):
self.list_ctrl.InsertColumn(0, COLUMN_NAMES[col], width=COLUMN_SIZES[col]) self.list_ctrl.InsertColumn(0, COLUMN_NAMES[col], width=COLUMN_SIZES[col])
def checklogin(self):
self.start_button.Enable(enable=settings["loggedin"])
self.stop_button.Enable(enable=settings["loggedin"])
self.secondary_frame_button.Enable(enable=settings["loggedin"])
def updatedata(self): def updatedata(self):
global settings global settings
if settings["running"] == True: if settings["running"] == True:
txt = "Status: Running (" + str(settings["config"]["core"]["level"]) + ")" txt = "Status: Running (" + str(settings["config"]["core"]["level"]) + ")"
else: else:
txt = "Status: Not running" txt = "Status: Not running"
self.list_ctrl.SetSize(self.GetSize()[0] - 50, self.GetSize()[1] - 200)
self.checklogin()
if settings["loggedin"] == True:
logintxt = " Logged in"
self.login_button.SetLabelText("Logout")
else:
self.login_button.SetLabelText("Login")
logintxt = "Not logged in"
self.statustext.SetLabel(txt)
self.logintext.SetLabel(logintxt)
if settings["newdata"] == True: if settings["newdata"] == True:
settings["newdata"] = False settings["newdata"] = False
else: else:
wx.CallLater(1000, self.updatedata) wx.CallLater(100, self.updatedata)
return return
fprint("updatedata called") fprint("updatedata called")
loaddata() loaddata()
@ -232,8 +269,8 @@ class ServerPanel(wx.Panel):
#fprint(i, j, TEST_FILE.iloc[i, j]) #fprint(i, j, TEST_FILE.iloc[i, j])
#self.SetSizer(self.main_sizer) #self.SetSizer(self.main_sizer)
self.statustext.SetLabel(txt)
wx.CallLater(1000, self.updatedata) wx.CallLater(100, self.updatedata)
def on_start(self, event): def on_start(self, event):
fprint('in on_start') fprint('in on_start')
@ -249,6 +286,15 @@ class ServerPanel(wx.Panel):
dg = GetData(parent = None) dg = GetData(parent = None)
dg.ShowModal() dg.ShowModal()
def on_login(self, event):
fprint("open login")
if settings["loggedin"] == True:
settings["loggedin"] = False
return
dg2 = ServerFrame()
#dg2.ShowModal()
def ShowImage(self, imageFile): def ShowImage(self, imageFile):
if imageFile == "": if imageFile == "":
self.bitmap = wx.StaticBitmap(self, -1, size=(0, 0)) self.bitmap = wx.StaticBitmap(self, -1, size=(0, 0))
@ -276,20 +322,20 @@ def openwindow(data, sets, kill):
killme = kill killme = kill
displaydata = data displaydata = data
settings = sets settings = sets
if settings["loggedin"]: #if settings["loggedin"]:
fprint("Creating server panel") fprint("Creating server panel")
loaddata() loaddata()
app = wx.App(False) app = wx.App(False)
frame = OtherFrame() frame = OtherFrame()
frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO)) frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
app.MainLoop() app.MainLoop()
else: #else:
fprint("Creating login panel") #fprint("Creating login panel")
app = wx.App(False) #app = wx.App(False)
frame = ServerFrame() #frame = ServerFrame()
frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO)) #frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
app.MainLoop() #app.MainLoop()
class GetData(wx.Dialog): class GetData(wx.Dialog):
def __init__(self, parent): def __init__(self, parent):

@ -26,7 +26,7 @@ if win32:
_, username = res.strip().rsplit("\n", 1) _, username = res.strip().rsplit("\n", 1)
userid, sysdom = username.rsplit("\\", 1) userid, sysdom = username.rsplit("\\", 1)
if linux: if linux or macos:
sysid = hex(uuid.getnode()) sysid = hex(uuid.getnode())
#fprint(sysid) #fprint(sysid)
datafile += sysid datafile += sysid
@ -91,7 +91,7 @@ def run_cmd(cmd):
fprint("ran PS command successfully") fprint("ran PS command successfully")
#completed = subprocess.run(["powershell", "-WindowStyle", "hidden", "-Command", cmd], capture_output=True, startupinfo=startupinfo) #completed = subprocess.run(["powershell", "-WindowStyle", "hidden", "-Command", cmd], capture_output=True, startupinfo=startupinfo)
return completed return completed
if linux: if linux or macos:
fprint("running sh command: " + cmd) fprint("running sh command: " + cmd)
completed = subprocess.run(["sh", "-c", cmd], capture_output=True) completed = subprocess.run(["sh", "-c", cmd], capture_output=True)
fprint("ran sh command successfully") fprint("ran sh command successfully")

Loading…
Cancel
Save