2015-01-17 74 views
0

我想写一个端口转发的扭曲,这将转发到端口8000如果一个IP地址已经在高速缓存&到另一个端口端口映射 - 说4000如果不是。我已经编写了缓存,但是在向Twisted添加逻辑的端口方面存在问题。根据病情在扭曲

就拿这个简单的例子:

class LoggingProxyServer(portforward.ProxyServer): 
    def dataReceived(self, data): 
     portforward.ProxyServer.dataReceived(self, data) 

class LoggingProxyFactory(portforward.ProxyFactory): 
    protocol = LoggingProxyServer 

我重写什么扭曲的方法来添加缓存检查?

+1

什么是“用户”? –

+0

@ Jean-PaulCalderone对不起,我编辑了这个问题。用户只是获取请求的IP地址,至少在初始阶段。 –

回答

0

ProxyServer.connectionMade是负责建立是从代理处理传出TCP连接。它利用其工厂的hostport属性决定什么它会作为连接尝试的目标使用。

如果你想改变代理的行为,这就是你需要重写代码。

您可以轻松地找到已连接到ProxyServer客户端的IP地址。该ProxyServer实例有一个transport属性,它指的是ITransport提供商(可能是一个ITCPTransport提供商,如果你的代理监听传入的TCP连接)。

传输有方法告诉你他们两个端点的地址。 getHost告诉你本地地址,getPeer告诉你远程地址。

因此,举例来说,你可以写一个条件是有一个行为的所有TCP客户提供IP地址开头的1和别的东西与其他IP地址的所有TCP客户端:

if self.transport.getPeer().host.startswith("1"): 
    ... 
else: 
    ...