add macos initial support, ui changes
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
core:
 | 
			
		||||
  autostart: true
 | 
			
		||||
  clockspeed: 20
 | 
			
		||||
  interval: 10
 | 
			
		||||
  interval: 5
 | 
			
		||||
  level: 2
 | 
			
		||||
  localadmin: true
 | 
			
		||||
sftp:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								ippigeon.py
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ippigeon.py
									
									
									
									
									
								
							@@ -48,7 +48,7 @@ if win32:
 | 
			
		||||
    _, username = res.strip().rsplit("\n", 1)
 | 
			
		||||
    userid, sysdom = username.rsplit("\\", 1)
 | 
			
		||||
 | 
			
		||||
if linux:
 | 
			
		||||
if linux or macos:
 | 
			
		||||
    sysid = hex(uuid.getnode())
 | 
			
		||||
    #fprint(sysid)
 | 
			
		||||
    datafile += sysid
 | 
			
		||||
@@ -154,11 +154,11 @@ def mainloop(pool):
 | 
			
		||||
    
 | 
			
		||||
    if settings["continueui"] == True:
 | 
			
		||||
        settings["continueui"] = False
 | 
			
		||||
        if ppanel is not None:
 | 
			
		||||
        #if ppanel is not None:
 | 
			
		||||
            # login panel is already open
 | 
			
		||||
            ppanel.terminate()
 | 
			
		||||
            ppanel = Process(target=panel.openwindow, args=(displaydata,settings,killme))
 | 
			
		||||
            ppanel.start()  
 | 
			
		||||
        #    ppanel.terminate()
 | 
			
		||||
        #    ppanel = Process(target=panel.openwindow, args=(displaydata,settings,killme))
 | 
			
		||||
        #    ppanel.start()  
 | 
			
		||||
 | 
			
		||||
    if settings["showui"] == True:
 | 
			
		||||
        settings["showui"] = False
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								netstat.py
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								netstat.py
									
									
									
									
									
								
							@@ -4,6 +4,7 @@ from util import fprint
 | 
			
		||||
from util import run_cmd
 | 
			
		||||
from util import win32
 | 
			
		||||
from util import linux
 | 
			
		||||
from util import macos
 | 
			
		||||
import util
 | 
			
		||||
import time
 | 
			
		||||
import csv
 | 
			
		||||
@@ -107,6 +108,44 @@ def process(data):
 | 
			
		||||
            writer = csv.writer(f)
 | 
			
		||||
            writer.writerows(output2)
 | 
			
		||||
        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():
 | 
			
		||||
@@ -123,3 +162,8 @@ def start():
 | 
			
		||||
        fprint("data acquired")
 | 
			
		||||
        return data
 | 
			
		||||
 | 
			
		||||
    if macos:
 | 
			
		||||
        data = run_cmd("netstat -anv")
 | 
			
		||||
        fprint("data acquired")
 | 
			
		||||
        return data
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										122
									
								
								panel.py
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								panel.py
									
									
									
									
									
								
							@@ -40,7 +40,7 @@ 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=(1000, 620))
 | 
			
		||||
        wx.Frame.__init__(self, None, -1, 'Server Panel', size=(1000, 675))
 | 
			
		||||
        panel = ServerPanel(self)
 | 
			
		||||
        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["password"] = pwdText.GetValue()
 | 
			
		||||
        settings["login"] = True
 | 
			
		||||
        #self.Destroy()
 | 
			
		||||
        self.Close()
 | 
			
		||||
        self.Parent.Close()
 | 
			
		||||
        #OtherFrame()
 | 
			
		||||
 | 
			
		||||
    def on_help(self, event):
 | 
			
		||||
@@ -142,7 +145,9 @@ class ServerPanel(wx.Panel):
 | 
			
		||||
        super().__init__(parent, size=(500, 500))
 | 
			
		||||
        #self.SetBackgroundColour((44, 51, 51))
 | 
			
		||||
        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.list_ctrl = wx.ListCtrl(
 | 
			
		||||
            self, size=(-1, 400),
 | 
			
		||||
@@ -159,49 +164,81 @@ class ServerPanel(wx.Panel):
 | 
			
		||||
        else:
 | 
			
		||||
            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.logintext = wx.StaticText(self, label=logintxt) # pos=(20,20))
 | 
			
		||||
        #self.main_sizer.Add(tb)
 | 
			
		||||
        #main_sizer.SetBackgroundColour((44, 51, 51))
 | 
			
		||||
        # self.pnl1.SetBackgroundColour(wx.BLACK)
 | 
			
		||||
        self.handle_columns()
 | 
			
		||||
        #self.updatedata()
 | 
			
		||||
        
 | 
			
		||||
        self.main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
 | 
			
		||||
        self.main_sizer.Add(self.secondary_sizer, 0, wx.ALL | wx.EXPAND, 20)
 | 
			
		||||
        self.secondary_sizer.Add(self.sub_sizer_left, 0, wx.ALL | wx.CENTER, 20)
 | 
			
		||||
        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)
 | 
			
		||||
        self.stop_button = wx.Button(self, label='Stop IPPigeon')
 | 
			
		||||
        self.stop_button.SetBackgroundColour('#F08080')
 | 
			
		||||
        self.secondary_frame_button = wx.Button(self, label='Settings')
 | 
			
		||||
        self.secondary_frame_button.Bind(wx.EVT_BUTTON, self.on_window)
 | 
			
		||||
        # wx.BORDER(stop_button, wx.BORDER_NONE)
 | 
			
		||||
        self.stop_button.Bind(wx.EVT_BUTTON, self.on_stop)
 | 
			
		||||
 | 
			
		||||
        self.login_button = wx.Button(self, label='Login')
 | 
			
		||||
        #self.login_button.SetBackgroundColour((205, 215, 206))
 | 
			
		||||
        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.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() 
 | 
			
		||||
        self.main_sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 20)
 | 
			
		||||
        start_button = wx.Button(self, label='Start IPPigeon')
 | 
			
		||||
        start_button.SetBackgroundColour((205, 215, 206))
 | 
			
		||||
        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 IPPigeon')
 | 
			
		||||
        stop_button.SetBackgroundColour('#F08080')
 | 
			
		||||
 | 
			
		||||
        secondary_frame_button = wx.Button(self, label='Settings')
 | 
			
		||||
        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_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.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 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):
 | 
			
		||||
        global settings
 | 
			
		||||
        if settings["running"] == True:
 | 
			
		||||
            txt = "Status: Running (" + str(settings["config"]["core"]["level"]) + ")"
 | 
			
		||||
        else:
 | 
			
		||||
            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:
 | 
			
		||||
            settings["newdata"] = False
 | 
			
		||||
        else:
 | 
			
		||||
            wx.CallLater(1000, self.updatedata)
 | 
			
		||||
            wx.CallLater(100, self.updatedata)
 | 
			
		||||
            return
 | 
			
		||||
        fprint("updatedata called")
 | 
			
		||||
        loaddata()
 | 
			
		||||
@@ -232,8 +269,8 @@ class ServerPanel(wx.Panel):
 | 
			
		||||
 | 
			
		||||
                #fprint(i, j, TEST_FILE.iloc[i, j])
 | 
			
		||||
        #self.SetSizer(self.main_sizer)
 | 
			
		||||
        self.statustext.SetLabel(txt)
 | 
			
		||||
        wx.CallLater(1000, self.updatedata)
 | 
			
		||||
        
 | 
			
		||||
        wx.CallLater(100, self.updatedata)
 | 
			
		||||
 | 
			
		||||
    def on_start(self, event):
 | 
			
		||||
        fprint('in on_start')
 | 
			
		||||
@@ -249,6 +286,15 @@ class ServerPanel(wx.Panel):
 | 
			
		||||
        dg = GetData(parent = None)
 | 
			
		||||
        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):
 | 
			
		||||
        if imageFile == "":
 | 
			
		||||
            self.bitmap = wx.StaticBitmap(self, -1, size=(0, 0))
 | 
			
		||||
@@ -276,20 +322,20 @@ def openwindow(data, sets, kill):
 | 
			
		||||
    killme = kill
 | 
			
		||||
    displaydata = data
 | 
			
		||||
    settings = sets
 | 
			
		||||
    if settings["loggedin"]:
 | 
			
		||||
        fprint("Creating server panel")
 | 
			
		||||
        loaddata()
 | 
			
		||||
        app = wx.App(False)
 | 
			
		||||
        frame = OtherFrame()
 | 
			
		||||
        frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
 | 
			
		||||
        app.MainLoop()
 | 
			
		||||
    else:
 | 
			
		||||
        fprint("Creating login panel")
 | 
			
		||||
        
 | 
			
		||||
        app = wx.App(False)
 | 
			
		||||
        frame = ServerFrame()
 | 
			
		||||
        frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
 | 
			
		||||
        app.MainLoop()
 | 
			
		||||
    #if settings["loggedin"]:
 | 
			
		||||
    fprint("Creating server panel")
 | 
			
		||||
    loaddata()
 | 
			
		||||
    app = wx.App(False)
 | 
			
		||||
    frame = OtherFrame()
 | 
			
		||||
    frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
 | 
			
		||||
    app.MainLoop()
 | 
			
		||||
    #else:
 | 
			
		||||
    #fprint("Creating login panel")
 | 
			
		||||
    
 | 
			
		||||
    #app = wx.App(False)
 | 
			
		||||
    #frame = ServerFrame()
 | 
			
		||||
    #frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
 | 
			
		||||
    #app.MainLoop()
 | 
			
		||||
 | 
			
		||||
class GetData(wx.Dialog):
 | 
			
		||||
    def __init__(self, parent):
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								util.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								util.py
									
									
									
									
									
								
							@@ -26,7 +26,7 @@ if win32:
 | 
			
		||||
    _, username = res.strip().rsplit("\n", 1)
 | 
			
		||||
    userid, sysdom = username.rsplit("\\", 1)
 | 
			
		||||
 | 
			
		||||
if linux:
 | 
			
		||||
if linux or macos:
 | 
			
		||||
    sysid = hex(uuid.getnode())
 | 
			
		||||
    #fprint(sysid)
 | 
			
		||||
    datafile += sysid
 | 
			
		||||
@@ -91,7 +91,7 @@ def run_cmd(cmd):
 | 
			
		||||
        fprint("ran PS command successfully")
 | 
			
		||||
        #completed = subprocess.run(["powershell", "-WindowStyle", "hidden", "-Command", cmd], capture_output=True, startupinfo=startupinfo)
 | 
			
		||||
        return completed
 | 
			
		||||
    if linux:
 | 
			
		||||
    if linux or macos:
 | 
			
		||||
        fprint("running sh command: " + cmd)
 | 
			
		||||
        completed = subprocess.run(["sh", "-c", cmd], capture_output=True)
 | 
			
		||||
        fprint("ran sh command successfully")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user