在建立连接之前检索本地IP

时间:2013-07-03 20:12:03

标签: c linux networking tcp routing

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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