如何在Python Twisted中获取原始TCP连接主机名?

1 投票
2 回答
1512 浏览
提问于 2025-04-15 19:36

在使用Twisted的TCP机制时,当我们创建一个协议时,能获取到的关于对方的信息只有它的IP地址和端口号。那么,我该如何获取我最初尝试连接的主机名呢?

reactor.connectTCP('somehost.com', 80, MyFactory)

我怎么才能通过某种回调获取到'somehost.com'呢?换句话说,connectTCP返回一个IConnector(不管它做什么)——我该如何在回调中将这个与某个具体的东西对应起来,因为这里没有使用deferreds?

2 个回答

2

简单来说,就是“自己记录下来”。

更新你的例子:

myfactory = MyFactory(connecthost='somehost.com')
reactor.connectTCP(myfactory.connecthost, 80, myfactory)

如果这是一条重要的信息,你应该明确地把它传递出去,就像你会把连接到一个主机的原因和连接后该做什么的细节传递给别人一样。

3

Jerub的回答在语义上是有道理的。不过,在仔细研究Twisted的代码后,我发现有一种更简单、更直接的方法可以实现我想要的效果。

在协议中:

def connectionMade(self):
    # This is the original connector that connectTCP returned
    connector = self.transport.connector

    # This is the original destination requested
    connector.getDestination()

撰写回答