Python TCP代理更改传出端口

时间:2014-01-02 00:15:06

标签: python multithreading sockets tcp reverse-proxy

我正在构建一个TCP反向代理。我可以成功发送和接收数据。但是,我想更改传出端口。例如,我接受说8000的连接,然后将数据代理到8001上的另一个主机。有时候,我想尽快将该端口更改为8002。我希望能够通过让代理在一个线程中运行,其余的工作在另一个线程中来实现。所以要改变端口,我真正要做的就是调用类似的东西:

changePort(8002) # Or whatever number I so choose

我在互联网上挖了一个使用twisted的例子:

from twisted.internet import reactor
from twisted.protocols import portforward

def server_dataReceived(self, data):
    print 'Server received data:', data
    portforward.Proxy.dataReceived(self, data)
portforward.ProxyServer.dataReceived = server_dataReceived

def client_dataReceived(self, data):
    print 'Client received data:', data
    portforward.Proxy.dataReceived(self, data)
portforward.ProxyClient.dataReceived = client_dataReceived

reactor.listenTCP(8000, portforward.ProxyFactory('someIP', 8001))
reactor.run()

这很有用,但是当我尝试使用Python线程时,即使我在一个新线程中启动了所有内容,在主线程中执行的代码也会挂起,直到我停止程序(Ctrl + c),它会快速运行并退出。

最后,我还遇到了这个Python Proxy in Less Than 100 Lines of Code,它也运行良好,可能有更好的方法来更改传出端口。

感谢您的帮助!

0 个答案:

没有答案