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

时间:2011-04-05 18:06:01

标签: python linux routing

我的脚本需要为存在不同网络的多个主机配置SNMP陷阱目标。因此,重要的是陷阱目标地址是远程节点可访问的接口。

我真的不想解析linux内核路由表,因为它可能很脆弱而容易破解。无论如何都要询问内核并让它告诉我数据包的路由方式。

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

2 个答案:

答案 0 :(得分:3)

Linux命令ip route get $DEST给出了所有场景中的最佳答案。这考虑了策略路由(由不同选择器选择的多个路由表)。

语法(来自ip route help):

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

答案 1 :(得分:1)

数据包始终采用最具体的路由。假设您的主机没有参与路由,如果没有任何静态配置的主机路由告知指向特定网络的流量采用不同的路由,它将始终采用默认路由(即0.0.0.0)。

即使您在单独的网络(例如eth1)上配置了单独的接口,您仍然只能有一个默认路由。如果你需要某些目的地来接受eth1,那么你需要configure a static route(也就是主路线)。

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