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,))
Ejemplo n.º 3
0
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)