1 from airhook import listenAirhookStream, StreamConnection
3 from twisted.internet import protocol, reactor
5 from random import randrange
8 class UDPListener(protocol.Protocol):
10 def makeConnection(self, connection):
11 self.conn = connection
12 def dataReceived(self, data):
17 self.out.transport.write(data)
19 class TCPReceiver(protocol.Protocol):
20 def dataReceived(self, data):
21 self.out.conn.write(data)
23 class TCPOutFactory(protocol.ClientFactory):
24 protocol = TCPReceiver
25 def __init__(self, out):
27 def buildProtocol(self, addr):
28 p = protocol.ClientFactory.buildProtocol(self, addr)
33 class AirUDPProxyFactory(protocol.ServerFactory):
35 protocol = UDPListener
36 def __init__(self, out):
38 def buildProtocol(self, addr):
39 p = protocol.ServerFactory.buildProtocol(self, addr)
40 reactor.connectTCP('localhost', self.out, TCPOutFactory(p))
44 f = AirUDPProxyFactory(tcp)
45 ah = listenAirhookStream(udp, f)
49 class UDPReceiver(protocol.Protocol):
50 def __init__(self, tcp):
52 def dataReceived(self, data):
53 self.tcp.transport.write(data)
54 def makeConnection(self, conn):
58 class TCPListener(protocol.Protocol):
59 def dataReceived(self, data):
62 class UDPOutFactory(protocol.ClientFactory):
63 protocol = UDPReceiver
64 def __init__(self, out):
66 def buildProtocol(self, addr):
67 p = UDPReceiver(self.out)
70 class AirTCPProxyFactory(protocol.ServerFactory):
72 protocol = TCPListener
73 def __init__(self, oaddr):
75 def buildProtocol(self, addr):
77 ah = listenAirhookStream(randrange(10000,12000), UDPOutFactory(p))
79 c = ah.connectionForAddr(self.oaddr)
84 f = AirTCPProxyFactory(('64.81.64.214', udp))
85 reactor.listenTCP(tcp, f)
87 if __name__ == '__main__':
88 if sys.argv[1] == '-l':
89 local(int(sys.argv[2]), int(sys.argv[3]))
91 remote(int(sys.argv[2]), int(sys.argv[3]))