c++ - 获取相关的本地 IP 地址/接口(interface)以发送到特定服务器

标签 c++ ip-address

我需要在建立 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/

相关文章:

java - IP 地址的哈希函数

java - 将 IP 地址转换为二进制值 (Java)

mysql - 建议跟踪所有登录、更新登录表或两者?

c++ - 读取整个文件并通过套接字发送

c++ - Python + alglib + NumPy : how to avoid converting arrays to lists?

c++ - 什么是带有 gui 和 linux 下的 c++ 的最佳稳定编辑器和编译器?

c++ - 将 OCTAVE C++ 移植到 iOS

C# - 添加和减去 IP 地址字符串以创建范围

joomla - 如何在 joomla 站点中限制基于网站的 IP 地址?

c++ - 不可预测的嵌套循环数量