Ejemplo n.º 1
0
 def on_command(self, cmd):
     print 'command:', repr(cmd)
     try:
         parse_request_addr(cmd)
     except Exception as e:
         print e
         self.destroy()
     else:
         self.send('\x05\x00\x00\x01' + '\x00' * 6, self.local_sock)
         print 'granted', self.local_addr
         self.cmd = cmd
         sock = socket.socket()
         self.remote_sock = sock
         sock.setblocking(0)
         sock2handler[sock] = self
         ws.add(sock)
         self.state = STATE_CONNECTING
         sock.connect_ex(config.server)
Ejemplo n.º 2
0
 def on_read(self, sock):
     try:
         data = sock.recv(BUF_SIZE)
     except Exception as e:
         print e
         self.destroy()
         return
     if not data:
         self.destroy()
         return
     if self.stage == STAGE_RELAYING:
         if sock == self.local_sock:
             data = decrypt(data)
             print '->', len(data)
             self.send(data, self.remote_sock)
         elif sock == self.remote_sock:
             print '<-', len(data)
             data = encrypt(data)
             self.send(data, self.local_sock)
     elif self.stage == STAGE_WAIT_COMMAND:
         cmd = decrypt(data)
         try:
             request_addr = parse_request_addr(cmd)
             self.send(encrypt('\x05\x00'), self.local_sock)
             sock = socket.socket()
             self.remote_sock = sock
             sock.setblocking(0)
             ws.add(sock)
             sock2handler[sock] = self
             sock.connect_ex(request_addr)
             self.stage = STAGE_CONNECTING
             print 'connecting to remote', request_addr
         except Exception as e:
             print e
             self.destroy()
     elif self.stage == STAGE_CONNECTING:
         data = decrypt(data)
         self.data_to_remote.append(data)