import socket
import struct
import sys
+import traceback
if sys.platform == "linux2":
class Proxy(asyncore.dispatcher):
- def __init__(self, sock):
- asyncore.dispatcher.__init__(self, sock)
+ def __init__(self, arg):
+ if isinstance(arg, tuple):
+ asyncore.dispatcher.__init__(self)
+ self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.connect(arg)
+ else:
+ asyncore.dispatcher.__init__(self, arg)
self.other = None
self.buffer = ""
other.other = self
def handle_error(self):
- print >>sys.stderr, "Proxy error:", sys.exc_info()
+ print >>sys.stderr, "Proxy error:", traceback.format_exc()
self.handle_close()
def handle_read(self):
self.buffer = ""
def handle_error(self):
- print >>sys.stderr, "ConnectProxy error:", sys.exc_info()
+ print >>sys.stderr, "ConnectProxy error:", traceback.format_exc()
self.handle_close()
def handle_read(self):
print >>sys.stderr, "Forwarding connection", host, port
# Create server proxy
- server_connection = socket.socket()
- server_connection.connect((host, port))
- server = Proxy(server_connection)
+ server = Proxy((host, port))
# Morph and connect
self.__class__ = Proxy
self.set_reuse_addr()
self.bind(("", listen_port))
self.listen(50)
+ print >>sys.stderr, "BasicForwarder bound on", listen_port
def handle_error(self):
- print >>sys.stderr, "BasicForwarder error:", sys.exc_info()
+ print >>sys.stderr, "BasicForwarder error:", traceback.format_exc()
def handle_accept(self):
client_connection, source_addr = self.accept()
return
print >>sys.stderr, "Accepted connection from", source_addr
- server_connection = socket.socket()
- server_connection.connect((self.host, self.port))
# Hook the sockets up to the event loop
client = Proxy(client_connection)
- server = Proxy(server_connection)
+ server = Proxy((self.host, self.port))
server.meet(client)
class Forwarder(asyncore.dispatcher):
self.set_reuse_addr()
self.bind(("", listen_port))
self.listen(50)
+ print >>sys.stderr, "Forwarder bound on", listen_port
def handle_error(self):
- print >>sys.stderr, "Forwarder error:", sys.exc_info()
+ print >>sys.stderr, "Forwarder error:", traceback.format_exc()
def handle_accept(self):
client_connection, source_addr = self.accept()
self.set_reuse_addr()
self.bind(("0.0.0.0", listen_port))
self.listen(50)
+ print >>sys.stderr, "Interceptor bound on", listen_port
def handle_error(self):
- print >>sys.stderr, "Interceptor error!", sys.exc_info()
+ print >>sys.stderr, "Interceptor error!", traceback.format_exc()
def handle_accept(self):
# Get sockets
client_connection, source_addr = self.accept()
dest = get_original_dest(client_connection)
print >>sys.stderr, "Accepted connection from", source_addr
- server_connection = socket.socket()
- server_connection.connect((self.host, self.port))
# Hook them up to the event loop
client = Proxy(client_connection)
- server = Proxy(server_connection)
+ server = Proxy((self.host, self.port))
server.buffer += "%s\n%d\n" % dest
server.meet(client)