def handshakeSuccessful(self, respHeader,c): c=list(map(lambda s: s.lstrip(),c.split(b","))) self._socketType = None if b"proxy" not in c: Log.error("An incoming connection has no proxy field",False) self.doDisconnect() return self.uri=base64.b64decode(self.uri) if(b"TCP" in c): if self._policyControl.tcpAllowed(): self._socket=SocketModeFactory.TCP.generateSocket() self._socketType="TCP" else: Log.policycontrol("An incoming tcp connection was rejected: TCP socket types disabled") self.doDisconnect() return if(b"UNIX" in c): if self._policyControl.unixAllowed(): self._socket=SocketModeFactory.UNIX.generateSocket() self._socketType="UNIX" else: Log.policycontrol("An incoming unix connection was rejected: UNIX socket types disabled") self.doDisconnect() return if(b"UDP" in c): if self._policyControl.udpAllowed(): self._socketType="UDP" self._socket=SocketModeFactory.UDP.generateSocket() else: Log.policycontrol("An incoming udp connection was rejected: UDP socket types disabled") self.doDisconnect() return if self._socketType is None: Log.warning("Incoming request has no socket specified") self.doDisconnect() return if self._socketType=="UNIX": uri=self.uri destination=uri else: port=self.uri[self.uri.rfind(b":")+1:] uri=self.uri[:self.uri.rfind(b":")] destination=(uri,int(port)) #policy control authStrings = list( filter(lambda elem: len(elem)>10 and ( chr(elem[0])=="H" or chr(elem[0])=="S") ,c)) if self._policyControl.hasAccess(self._socketType,self.requestHeader[b'Origin'],destination, authStrings): self.connectRemote(destination,respHeader,c) else: Log.policycontrol("Access denied for: %s connection to %s"%(self._socketType,destination)) self.doDisconnect(False)
def run(self): try: self.__s=SockServer(SocketModeFactory.TCP, ControlHandler,1) #self.__s.taskManager.config(autokick=False) self.__s.setReuseAdress() self.__addr = ("localhost",self.port) self.__s.bind(self.__addr) Log.info("control interface started: %s"%(self.__addr,)) self.__s.start() except socket.error: Log.error("control interface could not bound on %s",(self.__addr,))
def bootstrap(): def cmd(cmd): print("cmd",cmd) def exit_(): print("exit keystroke detected...") s.stop() #generate folder structure pathlist=["../resources","../resources/logs"] for i in pathlist: if not os.path.exists(i): os.mkdir(i) #init config StdConfig.getInstance() try: policy=PolicyControl.getInstance() except ParseError as e: Log.error("Policy XML malformed") Authentication.init() proxyWSPort=StdConfig.getInstance().getProxyPort() adress=("localhost",proxyWSPort) #s=ThreadedSockServer(SocketModeFactory.TCP,DynamicThreadPoolTaskManager, WebSocketProxyHandler,policy.getMaxConnections()) s=SockServer(SocketModeFactory.TCP, WebSocketProxyHandler,policy.getMaxConnections()) if StdConfig.getInstance().isControlInterfaceEnabled(): ci = ControlInterface(StdConfig.getInstance().getControlPort()) ci.start() it=InputThread(exit_,cmd) s.setReuseAdress() try: s.bind(adress) except socket.error: Log.error("Socket could not be bound on port %s"%proxyWSPort) Log.info("websocket proxyserver started: %s"%(adress,)) it.start() s.start() Log.info("websocket proxyserver stopped: %s"%(adress,)) sys.exit(0)