【发布时间】:2011-08-17 21:27:36
【问题描述】:
是否存在用于检索操作系统将使用哪个路由表条目将数据包发送到指定目标(IP 地址)的 API?此 API 必须能够遍历多个路由表之间的关系(由ip rules 指定)。
【问题讨论】:
-
查看iproute2,有一个函数
iproute_get。你可以蚕食它。
标签: c linux networking
是否存在用于检索操作系统将使用哪个路由表条目将数据包发送到指定目标(IP 地址)的 API?此 API 必须能够遍历多个路由表之间的关系(由ip rules 指定)。
【问题讨论】:
iproute_get。你可以蚕食它。
标签: c linux networking
不能保证路由是静态的。例如,如果您ping 一个主机在地球的另一端,一个 ping 可能会经过一条路线,而下一个 ping 可能会经过完全不同的路线。即使你喜欢 traceroute(从 0 开始的 TTL 并为每个答案增加 1),也不能保证路由不会从一个数据包更改为下一个数据包。
原因很简单,您无法知道从您到目的地的任何地方的两个路由器之间的通信会发生什么。路由器可能会接听一次,但一秒钟后可能会断电,或者电缆可能被切断,或者网络可能被禁用的任何其他原因(我最喜欢的是吸尘器拔插头,因为他们需要吸尘器的插座。)
【讨论】:
通用操作系统总是将数据包转发到它所连接的路由器。但是,如果操作系统是路由器操作系统(例如 IOS、JunOS 等),它将在路由表中执行查找(除其他外)以确定下一跳。数据包通常来自一个终端主机,然后经过一系列路由器,最后到达另一个端点。
我认为您正在寻找类似 traceroute 的东西,它可以告诉您数据包将采用的路由。
【讨论】: