我正在实现一项服务——使用 Twisted 框架用 Python 编写,在 Debian GNU/Linux 上运行——检查 SIP 服务器的可用性。为此,我使用 OPTIONS 方法(一种 SIP 协议(protocol)功能),因为这似乎是一种常见的做法。为了构建正确且符合 RFC 的 header ,我需要知道将要建立的连接的源 IP 地址和源端口。 [如何]用 Twisted 做到这一点?
这是我尝试过的:
我子类 protocol.DatagramProtocol在 startProtocol(self)
中,我使用了 self.transport.getHost().host
和 self.transport.getHost().port
。后者确实是将要使用的端口,而前者仅产生 0.0.0.0。
我想此时 Twisted [还?] 不知道将使用哪个接口(interface)以及哪个源 IP 地址。 Twisted 是否提供了可以帮助我解决这个问题的工具,或者我是否需要以不同的方式与操作系统(路由)交互?还是我只是错误地使用了 self.transport.getHost().host
?
最佳答案
为了完整起见,我回答我自己的问题:
在尝试确定主机的源 IP 地址之前,请确保在传输上使用 connect()。以下摘录显示了协议(protocol)实现的相关部分:
class FooBarProtocol(protocol.DatagramProtocol):
def startProtocol(self):
self.transport.getHost().host # => 0.0.0.0
self.transport.connect(self.dstHost, self.dstPort)
self.transport.getHost().host # => 192.168.1.102
关于python - Twisted:出站连接的源IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1622454/