1

我正在尝试使用 C 确定将在套接字上使用哪个本地 IP 与 Linux 上的给定主机建立 TCP 连接。

让我举个例子。我可以连接我的套接字并在文件描述符上使用 getsockname() 来获取本地 ip(和本地 TCP 端口);但是我可以在不打开连接的情况下做到这一点吗?

我可以读取路由表并据此做出决定——但网络子系统必须已经具有该算法,以便在连接实际打开时。简而言之,我想知道是否有 API 可以访问路由算法,而无需自己解析规则或打开实际连接。解决方案——如果有的话——可能只是 Linux,但没关系。

编辑:IRC 上的某个人建议我创建一个 UDP 套接字并在其上使用 connect()。那时没有使用网络,但我应该能够在其上使用 getsockname()

4

1 回答 1

0

我知道的唯一解决方案是 traceroute 的作用。发送一个 TTL 为 1 的数据包,然后查看 ICMP 返回的接口来自哪个接口。我记得不同主机之间存在很多不兼容性,因此您可能需要发送/接收几种不同类型的消息来获取所需的数据。

于 2013-07-03T20:37:22.270 回答