python - Twisted:出站连接的源IP地址

标签 python linux networking network-programming twisted

我正在实现一项服务——使用 Twisted 框架用 Python 编写,在 Debian GNU/Linux 上运行——检查 SIP 服务器的可用性。为此,我使用 OPTIONS 方法(一种 SIP 协议(protocol)功能),因为这似乎是一种常见的做法。为了构建正确且符合 RFC 的 header ,我需要知道将要建立的连接的源 IP 地址和源端口。 [如何]用 Twisted 做到这一点?

这是我尝试过的: 我子类 protocol.DatagramProtocolstartProtocol(self) 中,我使用了 self.transport.getHost().hostself.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/

相关文章:

python - 检查远程主机是否在 Python 中启动

python - 加载一个文件 python

C程序-服务器函数错误

c - 警告 : format '%lu' expects argument of type 'long unsigned int' , 但参数 4 的类型为 'long unsigned int *' [-Wformat]

networking - 从本地开发到 dockerized 微服务

android - 如何仅以编程方式为我的应用禁用移动数据

python - 在 python 中声明时引发异常

python - 图里创建错误: 'module' object not callable

python - 从标准输入管道输入时 ffmpeg 损坏

Java 套接字不会在死套接字上抛出异常?