【问题标题】:How to get the client IP address after got connection lost in twisted扭曲连接丢失后如何获取客户端IP地址
【发布时间】:2012-12-26 01:23:58
【问题描述】:

我知道我们可以在建立连接后获取客户端(主机)IP,因为那时我们将拥有传输属性:

self.transport.getPeer()

但是当客户端失去与服务器的连接时,我如何在扭曲的 TCP 服务器中获取客户端的 IP 地址,就像在它断开连接之后一样。

【问题讨论】:

  • 你不能在连接过程中这样做吗,将其存储为属性,然后稍后再读取

标签: python ip twisted


【解决方案1】:

这有点晚了。我建议您在拥有此信息时保存它。例如:

class YourProtocol(protocol.Protocol):

    def connectionMade(self):
        self._peer = self.transport.getPeer()

    def connectionLost(self):
        print 'Lost connection from', self._peer

【讨论】:

  • 谢谢你的回答。你确定我们不能在连接丢失时得到吗
  • 好吧,我第一次错了。实际上 self.transport.getPeer() 调用从 connectionLost() 回调中对我来说很好。我对此进行了 TCP 连接测试。我还可以从实现中看到,在 DatagramProtocol 子类的情况下,您将没有 self.protocol 属性,对于 UDP 也是如此。这是你的情况吗?
  • exceptions.TypeError: connectionLost() 只需要 1 个参数(给定 2 个)
【解决方案2】:

虽然已经回答了这个问题,但我想我会尽快添加我的,这样我以后就不会忘记这个了...众所周知,Twisted 的文档是 .. 扭曲的...

def connectionLost(self):
    ip, port = self.transport.client
    print ip
    print port

通过使用上述方法,您可以简单地将 ip/端口与任何数据库或您拥有的跟踪客户端的方式进行匹配。

我最终找到了使用print vars(self.transport) 并在输出/控制台中看到客户端对象...在这里使用经典的 php 调试

【讨论】:

    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 2012-02-16
    • 2019-01-14
    • 2015-12-20
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多