Proxy updates:

Signal handler

More logging of blacklist add / deletes when ClientInfo is True

Put config in config file (with default fallback if not exist)

either in it's own file, or in freedmr.cfg like below:

[PROXY]
Master = "127.0.0.1"
ListenPort = 62031
ListenIP =
DestportStart = 54000
DestPortEnd = 54100
Timeout = 30
Stats = False
Debug = False
ClientInfo = False
BlackList = [1234567]
IPBlackList = {}
proto_v5
Simon 4 years ago
parent 93d5ad61aa
commit bce7ee8172

@ -51,10 +51,10 @@ def IsIPv6Address(ip):
class Proxy(DatagramProtocol):
def __init__(self,Master,ListenPort,connTrack,blackList,IPBlackList,Timeout,Debug,ClientInfo,DestportStart,DestPortEnd):
def __init__(self,Master,ListenPort,connTrack,peerTrack,blackList,IPBlackList,Timeout,Debug,ClientInfo,DestportStart,DestPortEnd):
self.master = Master
self.connTrack = connTrack
self.peerTrack = {}
self.peerTrack = peerTrack
self.timeout = Timeout
self.debug = Debug
self.clientinfo = ClientInfo
@ -121,7 +121,9 @@ class Proxy(DatagramProtocol):
try:
self.IPBlackList[self.peerTrack[_peer_id]['shost']] = _bltime
except KeyError:
pass
return
if self.clientinfo:
print('Add to blacklist: host {}. Expire time {}').format(self.peerTrack[_peer_id]['shost'],_bltime)
return
if _command == DMRD:
@ -211,28 +213,85 @@ class Proxy(DatagramProtocol):
if __name__ == '__main__':
import signal
import configparser
import argparse
import sys
import json
#*** CONFIG HERE ***
#Set process title early
setproctitle(__file__)
# Change the current directory to the location of the application
os.chdir(os.path.dirname(os.path.realpath(sys.argv[0])))
# CLI argument parser - handles picking up the config file from the command line, and sending a "help" message
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--config', action='store', dest='CONFIG_FILE', help='/full/path/to/config.file (usually freedmr.cfg)')
cli_args = parser.parse_args()
# Ensure we have a path for the config file, if one wasn't specified, then use the execution directory
if not cli_args.CONFIG_FILE:
cli_args.CONFIG_FILE = os.path.dirname(os.path.abspath(__file__))+'/freedmr.cfg'
Master = "127.0.0.1"
ListenPort = 62031
# '' = all IPv4, '::' = all IPv4 and IPv6 (Dual Stack)
ListenIP = ''
DestportStart = 54000
DestPortEnd = 54100
Timeout = 30
Stats = False
Debug = False
ClientInfo = False
BlackList = [1234567]
#e.g. {10.0.0.1: 0, 10.0.0.2: 0}
IPBlackList = {}
_config_file = cli_args.CONFIG_FILE
#*******************
config = configparser.ConfigParser()
if not config.read(_config_file):
print('Configuration file \''+_config_file+'\' is not a valid configuration file!')
try:
Master = config.get('PROXY','Master')
ListenPort = config.getint('PROXY','ListenPort')
ListenIP = config.get('PROXY','ListenIP')
DestportStart = config.getint('PROXY','DestportStart')
DestPortEnd = config.getint('PROXY','DestPortEnd')
Timeout = config.getint('PROXY','Timeout')
Stats = config.getboolean('PROXY','Stats')
Debug = config.getboolean('PROXY','Debug')
ClientInfo = config.getboolean('PROXY','ClientInfo')
BlackList = json.loads(config.get('PROXY','BlackList'))
IPBlackList = json.loads(config.get('PROXY','IPBlackList'))
except configparser.Error as err:
print('Error processing configuration file -- {}'.format(err))
print('Using default config')
#*** CONFIG HERE ***
#Set process title early
setproctitle(__file__)
Master = "127.0.0.1"
ListenPort = 62031
#'' = all IPv4, '::' = all IPv4 and IPv6 (Dual Stack)
ListenIP = ''
DestportStart = 54000
DestPortEnd = 54100
Timeout = 30
Stats = False
Debug = False
ClientInfo = False
BlackList = [1234567]
#e.g. {10.0.0.1: 0, 10.0.0.2: 0}
IPBlackList = {}
#*******************
CONNTRACK = {}
PEERTRACK = {}
# Set up the signal handler
def sig_handler(_signal, _frame):
print('(GLOBAL) SHUTDOWN: PROXY IS TERMINATING WITH SIGNAL {}'.format(str(_signal)))
reactor.stop()
# Set signal handers so that we can gracefully exit if need be
for sig in [signal.SIGINT, signal.SIGTERM]:
signal.signal(sig, sig_handler)
#readState()
#If IPv6 is enabled by enivornment variable...
if ListenIP == '' and 'FDPROXY_IPV6' in os.environ and bool(os.environ['FDPROXY_IPV6']):
@ -248,9 +307,6 @@ if __name__ == '__main__':
if 'FDPROXY_LISTENPORT' in os.environ:
ListenPort = os.environ['FDPROXY_LISTENPORT']
CONNTRACK = {}
for port in range(DestportStart,DestPortEnd+1,1):
CONNTRACK[port] = False
@ -259,7 +315,7 @@ if __name__ == '__main__':
if ListenIP == '::' and IsIPv4Address(Master):
Master = '::ffff:' + Master
reactor.listenUDP(ListenPort,Proxy(Master,ListenPort,CONNTRACK,BlackList,IPBlackList,Timeout,Debug,ClientInfo,DestportStart,DestPortEnd),interface=ListenIP)
reactor.listenUDP(ListenPort,Proxy(Master,ListenPort,CONNTRACK,PEERTRACK,BlackList,IPBlackList,Timeout,Debug,ClientInfo,DestportStart,DestPortEnd),interface=ListenIP)
def loopingErrHandle(failure):
print('(GLOBAL) STOPPING REACTOR TO AVOID MEMORY LEAK: Unhandled error innowtimed loop.\n {}'.format(failure))
@ -287,6 +343,8 @@ if __name__ == '__main__':
for delete in _dellist:
IPBlackList.pop(delete)
if ClientInfo:
print('Remove dynamic blacklist entry for {}').format(delete)
if Stats == True:

Loading…
Cancel
Save

Powered by TurnKey Linux.