我需要在建立 tcp 连接之前获取将用于 tcp 连接的本地 IP 地址(类似于 INVITE 消息中的 SIP 联系人)。初始消息必须包含我的 IP 地址,并且使用的库在打开连接之前需要完整的消息。
假设服务器有 10.0.13.115,我的客户端有这些 IP 地址:
- 10.0.14.33 - VPN,这个地址就是要使用的地址
- 172.16.5.99 - 本地网络
- 192.168.75.66 - virtualbox、virtualPC、VMWare 等的桥接
除了打开与服务器的(虚拟)连接以使用本地接口(interface)之外,是否有一种(简单的)方法来获取 10.0.14.33?
编辑:感谢您到目前为止的回答。我既不能改变服务器也不能改变协议(protocol),所以我真的需要客户端的地址。我将检查是否可以更改网络库。
我希望有可能,因为操作系统/网络堆栈也必须找出信息...
最佳答案
查询本地路由表和接口(interface)最简单的方法是:
connect()
到目标的 UDP 套接字,并使用 getsockname()
了解本地地址。
因为它是一个 UDP 套接字,实际上没有任何东西发送到任何地方。
如果您发送的消息是通过您建立的同一个 TCP 连接发送的,则不需要这样做,因为您自然可以直接建立 TCP 连接,使用 getsockname()
获取本地地址,在您通过该连接发送的第一条“消息”中使用该地址。
关于c++ - 获取相关的本地 IP 地址/接口(interface)以发送到特定服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981233/