基于 Twisted 条件的端口转发
Port Forward based on condition in Twisted
我正在尝试在 Twisted 中编写一个端口转发器,如果 IP 地址已经在缓存中,它将转发到端口 8000,如果没有,则转发到另一个端口 - 例如 4000。我已经编写了缓存,但在使用 Twisted 将逻辑添加到端口转发的位置时遇到了问题。
举个简单的例子:
class LoggingProxyServer(portforward.ProxyServer):
def dataReceived(self, data):
portforward.ProxyServer.dataReceived(self, data)
class LoggingProxyFactory(portforward.ProxyFactory):
protocol = LoggingProxyServer
我要重写什么扭曲的方法来添加缓存检查?
ProxyServer.connectionMade
负责建立从代理进程传出的 TCP 连接。它使用其工厂的 host
和 port
属性来决定它将用作该连接尝试的目标。
如果您想改变代理的行为,您需要覆盖该代码。
您可以很容易地找到连接到ProxyServer
的客户端的IP地址。 ProxyServer
实例有一个 transport
属性,它引用 ITransport
提供者(如果您的代理正在侦听传入的 TCP 连接,则可能是 ITCPTransport
提供者)。
传输有方法告诉您它们两个端点的地址。 getHost
告诉你本地地址,getPeer
告诉你远程地址。
因此,例如,您可以编写一个条件,对所有 IP 地址以 1
开头的 TCP 客户端具有一种行为,对具有其他 IP 地址的所有 TCP 客户端具有另一种行为:
if self.transport.getPeer().host.startswith("1"):
...
else:
...
我正在尝试在 Twisted 中编写一个端口转发器,如果 IP 地址已经在缓存中,它将转发到端口 8000,如果没有,则转发到另一个端口 - 例如 4000。我已经编写了缓存,但在使用 Twisted 将逻辑添加到端口转发的位置时遇到了问题。
举个简单的例子:
class LoggingProxyServer(portforward.ProxyServer):
def dataReceived(self, data):
portforward.ProxyServer.dataReceived(self, data)
class LoggingProxyFactory(portforward.ProxyFactory):
protocol = LoggingProxyServer
我要重写什么扭曲的方法来添加缓存检查?
ProxyServer.connectionMade
负责建立从代理进程传出的 TCP 连接。它使用其工厂的 host
和 port
属性来决定它将用作该连接尝试的目标。
如果您想改变代理的行为,您需要覆盖该代码。
您可以很容易地找到连接到ProxyServer
的客户端的IP地址。 ProxyServer
实例有一个 transport
属性,它引用 ITransport
提供者(如果您的代理正在侦听传入的 TCP 连接,则可能是 ITCPTransport
提供者)。
传输有方法告诉您它们两个端点的地址。 getHost
告诉你本地地址,getPeer
告诉你远程地址。
因此,例如,您可以编写一个条件,对所有 IP 地址以 1
开头的 TCP 客户端具有一种行为,对具有其他 IP 地址的所有 TCP 客户端具有另一种行为:
if self.transport.getPeer().host.startswith("1"):
...
else:
...