如何找到到给定主机的连接将通过哪个接口路由?



我的脚本需要为存在不同网络的许多主机配置SNMP trap目的地。因此,trap目的地址必须是对端节点可访问的接口。

我真的不想解析linux内核路由表,因为它很可能是脆弱的,很容易被破坏。是否有办法询问内核并让它告诉我数据包的路由方式?

理想情况下,应该有一个python解决方案。我一直在看libdnet的python绑定,但似乎只能返回地址0.0.0.0的默认网关。

在所有情况下,这个问题的最佳答案是Linux命令ip route get $DEST。这考虑了策略路由(由不同选择器选择的多个路由表)。

语法(来自ip route help):

       ip route get ADDRESS [ from ADDRESS iif STRING ]
                        [ oif STRING ]  [ tos TOS ]

数据包总是选择最特定的路由。假设你的主机没有参与路由,如果没有任何静态配置的主机路由告诉流量到一个特定的网络采取不同的路由,它将始终采取默认路由(又名0.0.0.0)。

即使你在一个单独的网络上配置了一个单独的接口(例如eth1),你仍然只能有一个默认路由。如果你需要通过eth1到达特定的目的地,那么你需要配置一条静态路由(也就是主机路由)。

你这样做了吗?如果不是,这就是libdnet只提供默认网关的原因,因为这是主机知道的唯一出路。

相关内容

  • 没有找到相关文章

最新更新