我怎样才能find哪个接口连接到给定的主机将通过路由?

我的脚本需要为存在不同networking的许多主机configurationSNMP陷阱目标。 因此,陷阱目的地地址是远程节点可访问的接口的重要部分。

我真的不想parsingLinux内核路由表,因为它可能是脆弱的,容易中断。 有无论如何审问内核,并得到它告诉我一个数据包将路由的方式。

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

Solutions Collecting From Web of "我怎样才能find哪个接口连接到给定的主机将通过路由?"

在所有情况下,最好的答案是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,那么您将需要配置静态路由 (aka主机路由)。

你做到了吗? 如果没有,这就是为什么libdnet只提供默认网关,因为这是主机知道的唯一出路。