Add whitelist, tweak various code

testing 1669767392
Cole Deck 2 years ago
parent 2680f78cd6
commit 788487d181

@ -10,8 +10,10 @@ import time
import csv import csv
import ssh import ssh
def get_blocklist(config, appendbad): def get_blocklist(config, settings):
setup_child() setup_child()
appendbad = settings["appendbad"]
whitelist = settings["whitelist"]
fprint("Downloading deny list from server") fprint("Downloading deny list from server")
data = ssh.check_for_file(config, "BadIPs.csv", "receive") data = ssh.check_for_file(config, "BadIPs.csv", "receive")
#fprint(data.stdout) #fprint(data.stdout)
@ -24,7 +26,26 @@ def get_blocklist(config, appendbad):
for line in appendbad: for line in appendbad:
data2.append(line) data2.append(line)
for line in whitelist:
for line2 in data2:
if line[0] in line2 and line[1] in line2:
fprint("Whitelisting P1 " + line[0] + ":" + str(line[1]))
data2.remove(line2)
if line[2] in settings["badapps"]:
tmp = settings["badapps"]
tmp.remove(line[2])
settings["badapps"] = tmp
if line[0] in settings["badips"]:
tmp = settings["badips"]
tmp.remove(line[0])
settings["badips"] = tmp
for line3 in settings["badlines"]:
if line[0] in line3 and line[1] in line3:
fprint("Whitelisting P2" + line[0] + ":" + str(line[1]))
tmp = settings["badlines"]
tmp.remove(line3)
settings["badlines"] = tmp
fprint(data2) fprint(data2)
with open(find_data_file("blocklist.csv"), "w", newline="") as f: with open(find_data_file("blocklist.csv"), "w", newline="") as f:

@ -60,13 +60,13 @@ if linux or macos:
#fprint(hostname) #fprint(hostname)
def netstat_done(res): def netstat_done(res):
fprint("netstat done, processing") fprint("netstat done, processing", settings)
procdata_res = pool.apply_async(netstat.process, (res,), callback=process_done) procdata_res = pool.apply_async(netstat.process, (res,), callback=process_done)
#netstat.process(res) #netstat.process(res)
def process_done(res): def process_done(res):
if settings["running"] == True: if settings["running"] == True:
fprint("uploading to sftp...") fprint("uploading to sftp...", settings)
#ssh.sftp_send_data(config, datafile, 'send') #ssh.sftp_send_data(config, datafile, 'send')
procdata_res = pool.apply_async(ssh.sftp_send_data, (config, datafile, 'send'), callback=upload_done) procdata_res = pool.apply_async(ssh.sftp_send_data, (config, datafile, 'send'), callback=upload_done)
@ -79,16 +79,16 @@ def upload_done(res):
def login_done(res): def login_done(res):
if not res: if not res:
fprint("Login failure") fprint("Login failure", settings)
settings["message"] = "Login failure" settings["message"] = "Login failure"
else: else:
fprint("Login result in main: " + str(res)) fprint("Login result in main: " + str(res), settings)
settings["loggedin"] = res settings["loggedin"] = res
settings["continueui"] = True settings["continueui"] = True
def blockdata_done(res): def blockdata_done(res):
global settings global settings
fprint("FINISHED downloading block data") fprint("FINISHED downloading block data", settings)
tmpkill = settings["kill"] tmpkill = settings["kill"]
settings["kill"] = False settings["kill"] = False
#block_res = pool.apply_async(block.block_conn, (config, datafile, res, settings)) #block_res = pool.apply_async(block.block_conn, (config, datafile, res, settings))
@ -105,42 +105,42 @@ def blockdata_done(res):
tmplist = settings["badapps"] tmplist = settings["badapps"]
for x in block_pids: for x in block_pids:
fprint(x) fprint(x, settings)
if not x in tmplist: if not x in tmplist:
tmplist.append(x) tmplist.append(x)
settings["badapps"] = tmplist settings["badapps"] = tmplist
fprint(settings["badapps"]) fprint(settings["badapps"], settings)
tmplist = settings["badips"] tmplist = settings["badips"]
for x in block_ips: for x in block_ips:
fprint(x) fprint(x, settings)
if not x in tmplist: if not x in tmplist:
tmplist.append(x) tmplist.append(x)
settings["badips"] = tmplist settings["badips"] = tmplist
fprint(settings["badips"]) fprint(settings["badips"], settings)
settings["kill"] = tmpkill settings["kill"] = tmpkill
tmplist = settings["badlines"] tmplist = settings["badlines"]
for x in block_data: for x in block_data:
fprint(x) fprint(x, settings)
if not x in tmplist: if not x in tmplist:
tmplist.append(x) tmplist.append(x)
settings["badlines"] = tmplist settings["badlines"] = tmplist
fprint(settings["badlines"]) fprint(settings["badlines"], settings)
settings["newdata"] = True settings["newdata"] = True
def readstat_done(res): def readstat_done(res):
settings["stats"] = res settings["stats"] = res
fprint("Read stats!" + str(settings["stats"])) fprint("Read stats!" + str(settings["stats"]), settings)
def killall(): def killall():
kids = active_children() kids = active_children()
for kid in kids: for kid in kids:
kid.kill() kid.kill()
fprint("Every child has been killed") fprint("Every child has been killed", settings)
os.kill(os.getpid(), 9) # dirty kill of self os.kill(os.getpid(), 9) # dirty kill of self
@ -167,7 +167,7 @@ def mainloop(pool):
if netdata_res is None or netdata_res.ready(): if netdata_res is None or netdata_res.ready():
#rawdata = netdata_res.get() #rawdata = netdata_res.get()
#procdata_res = pool.apply_async(process_netstat, (rawdata)) #procdata_res = pool.apply_async(process_netstat, (rawdata))
fprint("netstat starting") fprint("netstat starting", settings)
netdata_res = pool.apply_async(netstat.start, callback=netstat_done) netdata_res = pool.apply_async(netstat.start, callback=netstat_done)
#fprint(netdata_res.successful()) #fprint(netdata_res.successful())
@ -193,8 +193,9 @@ def mainloop(pool):
if settings["block"] == True and settings["running"] == True: if settings["block"] == True and settings["running"] == True:
blockdata_res = pool.apply_async(block.get_blocklist, (config, settings["appendbad"]), callback=blockdata_done) #blockdata_res = pool.apply_async(block.get_blocklist, (config, settings), callback=blockdata_done)
#block.get_blocklist(config) res = block.get_blocklist(config, settings)
blockdata_done(res)
settings["block"] = False settings["block"] = False
if config["core"]["level"] == 0: if config["core"]["level"] == 0:
@ -233,7 +234,7 @@ def mainloop(pool):
badport = line[5] badport = line[5]
if (badip, badport) not in history: if (badip, badport) not in history:
fprint("Firewalling " + badip + ":" + str(badport)) fprint("Firewalling " + badip + ":" + str(badport), settings)
send_notification("Firewalling " + badip + ":" + str(badport)) send_notification("Firewalling " + badip + ":" + str(badport))
if win32: if win32:
cmd = 'New-NetFirewallRule -DisplayName "IPPigeon Security Rule ' + badip + ':' + str(badport) + '" -Group "IPPigeon" -Direction Outbound -LocalPort Any -Protocol ' + badproto + ' -Action Block -RemoteAddress ' + badip + ' -RemotePort ' + str(badport) cmd = 'New-NetFirewallRule -DisplayName "IPPigeon Security Rule ' + badip + ':' + str(badport) + '" -Group "IPPigeon" -Direction Outbound -LocalPort Any -Protocol ' + badproto + ' -Action Block -RemoteAddress ' + badip + ' -RemotePort ' + str(badport)
@ -253,7 +254,7 @@ def mainloop(pool):
with open(find_data_file('config.yml'), 'w') as filewrite: with open(find_data_file('config.yml'), 'w') as filewrite:
#global config #global config
yaml.dump(config, filewrite) yaml.dump(config, filewrite)
fprint("Config saved!") fprint("Config saved!", settings)
sleep(interval / (interval * config["core"]["clockspeed"])) sleep(interval / (interval * config["core"]["clockspeed"]))
counter += 1 counter += 1
@ -312,6 +313,8 @@ if __name__ == '__main__':
settings["running"] = config["core"]["autostart"] settings["running"] = config["core"]["autostart"]
settings["newdata"] = False settings["newdata"] = False
settings["appendbad"] = list() settings["appendbad"] = list()
settings["logMsg"] = list()
settings["whitelist"] = list()
tmp = list() tmp = list()
tmp.append(["N/A", "TCP", "N/A", "N/A", "20.112.52.29", "5000", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"]) tmp.append(["N/A", "TCP", "N/A", "N/A", "20.112.52.29", "5000", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"])
tmp.append(["N/A", "TCP", "N/A", "N/A", "20.81.111.85", "80", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"]) tmp.append(["N/A", "TCP", "N/A", "N/A", "20.81.111.85", "80", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"])

Binary file not shown.

@ -5,6 +5,7 @@ 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 from util import macos
from ippigeon import settings
import util import util
import time import time
import csv import csv
@ -13,7 +14,7 @@ import csv
def process(data): def process(data):
setup_child() setup_child()
fprint("netstat processing") fprint("netstat processing", settings)
if win32: if win32:
#output = data.stdout #output = data.stdout
#print(output) #print(output)
@ -69,13 +70,13 @@ def process(data):
with open(find_data_file(util.datafile), "w", newline="") as f: with open(find_data_file(util.datafile), "w", newline="") as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(output2) writer.writerows(output2)
fprint("done creating csv") fprint("done creating csv", settings)
if linux: if linux:
output = data.stdout.decode().split('\n') # split stdout into lines output = data.stdout.decode().split('\n') # split stdout into lines
output = [i for i in output if i] output = [i for i in output if i]
if output[0].find("Not all processes could be identified") >= 0: if output[0].find("Not all processes could be identified") >= 0:
fprint("Not enough permissions") fprint("Not enough permissions", settings)
raise PermissionError("Unable to acquire netstat data without admin!") raise PermissionError("Unable to acquire netstat data without admin!")
output2 = list() output2 = list()
output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata
@ -107,7 +108,7 @@ def process(data):
with open(find_data_file(util.datafile), "w", newline="") as f: with open(find_data_file(util.datafile), "w", newline="") as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(output2) writer.writerows(output2)
fprint("done creating csv") fprint("done creating csv", settings)
if macos: if macos:
output = data.stdout.decode().split('\n') # split stdout into lines output = data.stdout.decode().split('\n') # split stdout into lines
@ -115,7 +116,7 @@ def process(data):
#fprint("output data: " + str(output)) #fprint("output data: " + str(output))
output = [i for i in output if i] output = [i for i in output if i]
if output[0].find("Not all processes could be identified") >= 0: if output[0].find("Not all processes could be identified") >= 0:
fprint("Not enough permissions") fprint("Not enough permissions", settings)
raise PermissionError("Unable to acquire netstat data without admin!") raise PermissionError("Unable to acquire netstat data without admin!")
output2 = list() output2 = list()
output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata
@ -144,25 +145,25 @@ def process(data):
with open(find_data_file(util.datafile), "w", newline="") as f: with open(find_data_file(util.datafile), "w", newline="") as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(output2) writer.writerows(output2)
fprint("done creating csv") fprint("done creating csv", settings)
def start(): def start():
setup_child() setup_child()
fprint("netstat started") fprint("netstat started", settings)
if win32: if win32:
data = run_cmd("netstat -n -o -b") data = run_cmd("netstat -n -o -b")
fprint("data acquired") fprint("data acquired", settings)
return data return data
if linux: if linux:
data = run_cmd("netstat -atunpw") data = run_cmd("netstat -atunpw")
fprint("data acquired") fprint("data acquired", settings)
return data return data
if macos: if macos:
data = run_cmd("netstat -anv") data = run_cmd("netstat -anv")
fprint("data acquired") fprint("data acquired", settings)
return data return data

@ -0,0 +1,19 @@
from plyer import notification #for getting notification on your PC
import sys
from playsound import playsound #pip install playsound==1.2.2
from util import find_data_file
relative_path = (sys.path[0])
sound = find_data_file('music.mp3')
def send_notification(msg="Test notification"):
notification.notify(
title = "IP Pigeon",
message = msg,
app_name = "IPPigeon",
app_icon = find_data_file("icon.ico"),
timeout = 5 #number of seconds message is displayed
)
playsound(sound)
if __name__ == '__main__':
send_notification()

@ -1,5 +1,7 @@
import glob import glob
import wx import wx
import logging
import sys
import wx.lib.buttons as buttons import wx.lib.buttons as buttons
import numpy as np import numpy as np
import pandas as pd import pandas as pd
@ -47,7 +49,7 @@ class OtherFrame(wx.Frame):
self.Show() self.Show()
def on_edit(self, event): def on_edit(self, event):
fprint('in on_edit') fprint('in on_edit', settings)
def on_window(self, event): def on_window(self, event):
return return
@ -208,16 +210,30 @@ class ServerPanel(wx.Panel):
self.blacklist_button = wx.Button(self, label='Add to blacklist') self.blacklist_button = wx.Button(self, label='Add to blacklist')
#self.login_button.SetBackgroundColour((205, 215, 206)) #self.login_button.SetBackgroundColour((205, 215, 206))
self.blacklist_button.Bind(wx.EVT_BUTTON, self.on_blacklist) self.blacklist_button.Bind(wx.EVT_BUTTON, self.on_blacklist)
self.whitelist_button = wx.Button(self, label='Add to whitelist')
#self.login_button.SetBackgroundColour((205, 215, 206))
self.whitelist_button.Bind(wx.EVT_BUTTON, self.on_whitelist)
self.log_button = wx.Button(self, label='Logs')
self.log_button.Bind(wx.EVT_BUTTON, self.on_log)
#self.log_window = wx.LogWindow(self, 'Log Window', True)
#show_log_button = wx.Button(self, wx.NewId(), 'Show Log')
#show_log_button.Bind(wx.EVT_BUTTON, self._show_log)
self.sub_sizer_right.Add(self.statustext, 0, wx.CENTER | wx.ALL | 100, 5) 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_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.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.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_left.Add(self.secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_left.Add(self.log_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_right.Add(self.login_button, 0, wx.CENTER | wx.ALL | 100, 5) self.sub_sizer_right.Add(self.login_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_right.Add(self.quit_button, 0, wx.CENTER | wx.ALL | 100, 5) self.sub_sizer_right.Add(self.quit_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_stats.Add(self.stattext, 0, wx.CENTER | wx.ALL | 100, 5) self.sub_sizer_stats.Add(self.stattext, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_filter.Add(self.blacklist_button, 0, wx.CENTER | wx.ALL | 100, 5) self.sub_sizer_filter.Add(self.blacklist_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.sub_sizer_filter.Add(self.whitelist_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.start_button.Enable(enable=settings["loggedin"])
self.stop_button.Enable(enable=settings["loggedin"]) self.stop_button.Enable(enable=settings["loggedin"])
@ -238,8 +254,10 @@ class ServerPanel(wx.Panel):
self.quit_button.Enable(enable=settings["loggedin"]) self.quit_button.Enable(enable=settings["loggedin"])
if self.list_ctrl.GetFirstSelected() < 0: if self.list_ctrl.GetFirstSelected() < 0:
self.blacklist_button.Enable(enable=False) self.blacklist_button.Enable(enable=False)
self.whitelist_button.Enable(enable=False)
else: else:
self.blacklist_button.Enable(enable=settings["loggedin"]) self.blacklist_button.Enable(enable=settings["loggedin"])
self.whitelist_button.Enable(enable=settings["loggedin"])
def updatedata(self): def updatedata(self):
global settings global settings
if settings["running"] == True: if settings["running"] == True:
@ -265,16 +283,16 @@ class ServerPanel(wx.Panel):
else: else:
wx.CallLater(100, self.updatedata) wx.CallLater(100, self.updatedata)
return return
fprint("updatedata called") fprint("updatedata called", settings)
loaddata() loaddata()
list_total = self.list_ctrl.GetItemCount() list_total = self.list_ctrl.GetItemCount()
list_top = self.list_ctrl.GetTopItem() list_top = self.list_ctrl.GetTopItem()
list_pp = self.list_ctrl.GetCountPerPage() list_pp = self.list_ctrl.GetCountPerPage()
list_bottom = min(list_top + list_pp, list_total - 1) list_bottom = min(list_top + list_pp, list_total - 1)
if self.list_ctrl.DeleteAllItems(): if self.list_ctrl.DeleteAllItems():
fprint("Items deleted") fprint("Items deleted", settings)
else: else:
fprint("Unable to delete") fprint("Unable to delete", settings)
for i in range(len(TEST_FILE)): for i in range(len(TEST_FILE)):
if str(TEST_FILE.iloc[i, 4]).find("TIME_WAIT") >= 0 or str(TEST_FILE.iloc[i, 4]).find("FIN_WAIT_2") >= 0: if str(TEST_FILE.iloc[i, 4]).find("TIME_WAIT") >= 0 or str(TEST_FILE.iloc[i, 4]).find("FIN_WAIT_2") >= 0:
continue continue
@ -283,7 +301,7 @@ class ServerPanel(wx.Panel):
#fprint(pid) #fprint(pid)
idx = i idx = i
if TEST_FILE.iloc[i, 5] == app: # "bad" pid, highlight in red at the top if TEST_FILE.iloc[i, 5] == app: # "bad" pid, highlight in red at the top
fprint("BAD APP UI: " + str(app)) fprint("BAD APP UI: " + str(app), settings)
idx = self.list_ctrl.InsertItem(0, TEST_FILE.iloc[i, 0]) idx = self.list_ctrl.InsertItem(0, TEST_FILE.iloc[i, 0])
self.list_ctrl.SetItemBackgroundColour(idx, wx.Colour(200, 51, 51)) self.list_ctrl.SetItemBackgroundColour(idx, wx.Colour(200, 51, 51))
break break
@ -305,21 +323,21 @@ class ServerPanel(wx.Panel):
wx.CallLater(100, 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', settings)
settings["running"] = True settings["running"] = True
def on_stop(self, event): def on_stop(self, event):
fprint('in on_stop') fprint('in on_stop', settings)
settings["running"] = False settings["running"] = False
util.clear_fwll() util.clear_fwll()
def on_window(self, event): def on_window(self, event):
fprint("open settings") fprint("open settings", settings)
dg = GetData(parent = None) dg = GetData(parent = None)
dg.ShowModal() dg.ShowModal()
def on_login(self, event): def on_login(self, event):
fprint("open login") fprint("open login", settings)
if settings["loggedin"] == True: if settings["loggedin"] == True:
settings["loggedin"] = False settings["loggedin"] = False
return return
@ -341,10 +359,32 @@ class ServerPanel(wx.Panel):
proto = self.list_ctrl.GetItem(idx, 1).GetText() proto = self.list_ctrl.GetItem(idx, 1).GetText()
dest = self.list_ctrl.GetItem(idx, 3).GetText() dest = self.list_ctrl.GetItem(idx, 3).GetText()
destip, destport = dest.split(":") destip, destport = dest.split(":")
fprint([proto, destip, destport]) fprint([proto, destip, destport], settings)
tmp.append(["N/A", proto, "N/A", "N/A", destip, destport, "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"]) tmp.append(["N/A", proto, "N/A", "N/A", destip, destport, "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A"])
settings["appendbad"] = tmp settings["appendbad"] = tmp
def on_whitelist(self, event):
global settings
tmp = settings["whitelist"]
idx = self.list_ctrl.GetFirstSelected()
if idx < 0:
return
proto = self.list_ctrl.GetItem(idx, 1).GetText()
dest = self.list_ctrl.GetItem(idx, 3).GetText()
pid = self.list_ctrl.GetItem(idx, 5).GetText()
destip, destport = dest.split(":")
fprint([proto, destip, destport], settings)
tmp.append([destip, destport, int(pid)])
settings["whitelist"] = tmp
def on_log(self, event):
fprint("open log", settings)
dg = logData(parent = None)
#fprint("attempting logLoop", settings)
logData.logLoop(dg)
#fprint("did logLoop work?", settings)
dg.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))
@ -373,7 +413,7 @@ def openwindow(data, sets, kill):
displaydata = data displaydata = data
settings = sets settings = sets
#if settings["loggedin"]: #if settings["loggedin"]:
fprint("Creating server panel") fprint("Creating server panel", settings)
loaddata() loaddata()
app = wx.App(False) app = wx.App(False)
frame = OtherFrame() frame = OtherFrame()
@ -387,6 +427,58 @@ def openwindow(data, sets, kill):
#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 RedirectText(object):
def __init__(self,aWxTextCtrl):
self.out = aWxTextCtrl
def write(self,string):
self.out.WriteText(string)
class logData(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, wx.ID_ANY, "Logs: ", size = (800,500))
self.p = wx.Panel(self, wx.ID_ANY)
#self.logBox = wx.BoxSizer(wx.VERTICAL)
self.logsTitle = wx.StaticText(self.p, label="Logs", pos=(20,20))
self.logs = wx.TextCtrl(self.p, pos=(20,40), size= (700, 400), style=wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
self.logs.WriteText("init\n")
#keepLoop = False
def logLoop(self):
#self.logs.WriteText("before while loop\n")
i=0
#self.logs.Clear()
tmp = settings["logMsg"]
if (tmp is not None):
while(i < len(settings["logMsg"])):
#for i in range(len(settings["logMsg"])):
#self.logs.WriteText("in while loop\n")
self.logs.WriteText(settings["logMsg"][i])
self.logs.WriteText("\n")
tmp.remove(settings["logMsg"][i])
i+=1
else:
#self.logs.WriteText("settings is none :(")
tmp.add("init string for list")
logData.logLoop(self)
settings["logMsg"] = tmp
wx.CallLater(100, self.logLoop)
#self.logs.WriteText("after while loop\n")
#redir = RedirectText(self.logs)
#sys.stdout = redir
#self.logs.WriteText(redir)
#self.logs.LoadFile('output.log')
#def doLogging(self):
#self.logs.WriteText("hi from doLogging\n")
#self.logs.WriteText(settings["logMsg"])
class GetData(wx.Dialog): class GetData(wx.Dialog):
def __init__(self, parent): def __init__(self, parent):
wx.Dialog.__init__(self, parent, wx.ID_ANY, "User Settings: ", size = (800,500)) wx.Dialog.__init__(self, parent, wx.ID_ANY, "User Settings: ", size = (800,500))
@ -434,7 +526,7 @@ class GetData(wx.Dialog):
def OnQuit(self, event): def OnQuit(self, event):
# save changes # save changes
fprint("saving changes...") fprint("saving changes...", settings)
config = settings["config"] config = settings["config"]
config["sftp"]["host"] = self.hostnametext.GetValue() config["sftp"]["host"] = self.hostnametext.GetValue()
config["sftp"]["user"] = self.usertext.GetValue() config["sftp"]["user"] = self.usertext.GetValue()

@ -5,7 +5,7 @@ debug = True
debug = not debug debug = not debug
# Dependencies are automatically detected, but it might need fine tuning. # Dependencies are automatically detected, but it might need fine tuning.
# "packages": ["os"] is used as example only # "packages": ["os"] is used as example only
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"], "include_msvcr": True, "include_files": ["icon.png", "config.yml", "keyfile-admin.pem", "WXPython.png", "WXPython_30x30.png", "settings.png", "settings_30x30.png", "icon.ico"], "optimize": 1} build_exe_options = {"packages": ["os"], "excludes": ["tkinter"], "include_msvcr": True, "include_files": ["icon.png", "config.yml", "keyfile-admin.pem", "WXPython.png", "WXPython_30x30.png", "settings.png", "settings_30x30.png", "icon.ico", "music.mp3"], "optimize": 1}
# base="Win32GUI" should be used only for Windows GUI app # base="Win32GUI" should be used only for Windows GUI app
base = None base = None

@ -8,44 +8,45 @@ from invoke import exceptions
import sys import sys
c = None c = None
settings = None
def sftp_send_data(config, filename, filetype): def sftp_send_data(config, filename, filetype):
setup_child() setup_child()
if not macos: if not macos:
fprint("Connecting over SSH to " + config['sftp']['host']) fprint("Connecting over SSH to " + config['sftp']['host'], settings)
global c global c
if c is None: if c is None:
c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),}) c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),})
fprint("Sending data over SFTP: " + filename) fprint("Sending data over SFTP: " + filename, settings)
fprint(c.put(find_data_file(filename), remote=config['sftp']['filepath'][filetype])) fprint(c.put(find_data_file(filename), remote=config['sftp']['filepath'][filetype]), settings)
fprint("Data sent over SFTP successfully") fprint("Data sent over SFTP successfully", settings)
#command = 'ls ' + config['sftp']['filepath'][filetype] #command = 'ls ' + config['sftp']['filepath'][filetype]
#fprint(c.run(command)) #fprint(c.run(command))
def check_for_file(config, filename, location): def check_for_file(config, filename, location):
setup_child() setup_child()
fprint("Connecting over SSH to " + config['sftp']['host']) fprint("Connecting over SSH to " + config['sftp']['host'], settings)
global c global c
if c is None: if c is None:
c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),}) c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),})
fprint("Checking for existence of file " + config['sftp']['filepath'][location] + "/" + filename) fprint("Checking for existence of file " + config['sftp']['filepath'][location] + "/" + filename, settings)
try: try:
res = c.run("ls -l " + config['sftp']['filepath'][location] + "/" + filename, hide=True) res = c.run("ls -l " + config['sftp']['filepath'][location] + "/" + filename, hide=True)
fprint("File " + filename + " exists!") fprint("File " + filename + " exists!", settings)
return c.run("cat " + config['sftp']['filepath'][location] + "/" + filename, hide=True) return c.run("cat " + config['sftp']['filepath'][location] + "/" + filename, hide=True)
except exceptions.UnexpectedExit: except exceptions.UnexpectedExit:
return False return False
def run_ssh(config, command, location): def run_ssh(config, command, location):
setup_child() setup_child()
fprint("Connecting over SSH to " + config['sftp']['host']) fprint("Connecting over SSH to " + config['sftp']['host'], settings)
global c global c
if c is None: if c is None:
c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),}) c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),})
fprint("cd to " + config['sftp']['filepath'][location]) fprint("cd to " + config['sftp']['filepath'][location], settings)
with c.cd(config['sftp']['filepath'][location]): with c.cd(config['sftp']['filepath'][location]):
fprint("Running ssh command: " + command) fprint("Running ssh command: " + command, settings)
res = c.run(command, hide=True, asynchronous=True) res = c.run(command, hide=True, asynchronous=True)
return res return res

@ -42,7 +42,7 @@ class TaskBarIcon(wx.adv.TaskBarIcon):
self.SetIcon(icon, TRAY_TOOLTIP) self.SetIcon(icon, TRAY_TOOLTIP)
def on_left_down(self, event): def on_left_down(self, event):
fprint ('Tray icon was left-clicked.') fprint('Tray icon was left-clicked.', settings)
def on_open(self, event): def on_open(self, event):
settings["showui"] = True settings["showui"] = True
@ -81,7 +81,7 @@ def background(data, sets, kill):
app = TaskbarApp(False) app = TaskbarApp(False)
displaydata = data displaydata = data
settings = sets settings = sets
fprint("Creating taskbar icon") fprint("Creating taskbar icon", settings)
app.MainLoop() app.MainLoop()
TRAY_ICON = find_data_file('icon.png') TRAY_ICON = find_data_file('icon.png')

@ -12,6 +12,10 @@ win32 = platform == "win32"
linux = platform == "linux" or platform == "linux2" linux = platform == "linux" or platform == "linux2"
macos = platform == "darwin" macos = platform == "darwin"
datafile = "" datafile = ""
logMsg = ""
logCont = ""
settings = None
if win32: if win32:
sysid = hex(uuid.getnode()) sysid = hex(uuid.getnode())
@ -44,21 +48,28 @@ def time():
def kill(pid): def kill(pid):
setup_child() setup_child()
if pid > 0: if pid > 0:
fprint("Killing PID " + str(pid)) fprint("Killing PID " + str(pid), settings)
os.kill(int(pid), 9) os.kill(int(pid), 9)
fprint("Signal 9 sent to PID " + str(pid)) fprint("Signal 9 sent to PID " + str(pid), settings)
def fprint(msg): def fprint(msg, settings = None):
#if not getattr(sys, "frozen", False): #if not getattr(sys, "frozen", False):
setup_child() setup_child()
try: try:
frm = inspect.stack()[1] frm = inspect.stack()[1]
mod = inspect.getmodule(frm[0]) mod = inspect.getmodule(frm[0])
print('[' + mod.__name__ + ":" + frm.function + ']:', str(msg)) logMsg = '[' + mod.__name__ + ":" + frm.function + ']:' + str(msg)
print(logMsg)
if (settings is not None):
tmpList = settings["logMsg"]
tmpList.append(logMsg)
settings["logMsg"] = tmpList
except Exception as e: except Exception as e:
try: try:
print('[????:' + frm.function + ']:', str(msg)) print('[????:' + frm.function + ']:', str(msg))
print('[util:fprint]: ' + str(e))
except: except:
print('[????]:', str(msg)) print('[????]:', str(msg))
@ -87,21 +98,23 @@ def run_cmd(cmd):
#else: #else:
# print("alt") # print("alt")
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW # , "-WindowStyle", "hidden" startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW # , "-WindowStyle", "hidden"
fprint("running PS command: " + cmd) fprint("running PS command: " + cmd, settings)
completed = subprocess.run(["powershell", "-Command", cmd], capture_output=True, startupinfo=startupinfo) completed = subprocess.run(["powershell", "-Command", cmd], capture_output=True, startupinfo=startupinfo)
fprint("ran PS command successfully") fprint("ran PS command successfully", settings)
#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 or macos: if linux or macos:
fprint("running sh command: " + cmd) fprint("running sh command: " + cmd, settings)
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", settings)
return completed return completed
def setup_child(): def setup_child(sets=None):
if not getattr(sys, "frozen", False): if not getattr(sys, "frozen", False):
sys.stdout = Logger(filename=find_data_file("output.log")) sys.stdout = Logger(filename=find_data_file("output.log"))
sys.stderr = Logger(filename=find_data_file("output.log")) sys.stderr = Logger(filename=find_data_file("output.log"))
if sets is not None:
settings = sets
class Logger(object): class Logger(object):
def __init__(self, filename="output.log"): def __init__(self, filename="output.log"):
@ -128,7 +141,7 @@ def clear_fwll():
def write_stats(stats): def write_stats(stats):
fprint("Writing stats") fprint("Writing stats", settings)
tmp = list() tmp = list()
tmp.append(["connections blocked", "connections allowed", "data uploaded", "data recieved", "block ratio"]) tmp.append(["connections blocked", "connections allowed", "data uploaded", "data recieved", "block ratio"])
tmp.append(stats) tmp.append(stats)
@ -136,16 +149,16 @@ def write_stats(stats):
with open(find_data_file("stats.csv"), "w", newline="") as f: with open(find_data_file("stats.csv"), "w", newline="") as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(tmp) writer.writerows(tmp)
fprint("Done writing stats") fprint("Done writing stats", settings)
def read_stats(): def read_stats():
with open(find_data_file("stats.csv"), newline='') as csvfile: with open(find_data_file("stats.csv"), newline='') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='|') csvreader = csv.reader(csvfile, delimiter=',', quotechar='|')
header = True header = True
fprint(csvreader) fprint(csvreader, settings)
data = list() data = list()
for line in csvreader: for line in csvreader:
fprint(line) fprint(line, settings)
if header: if header:
header = False header = False
continue continue

Loading…
Cancel
Save