在 Linux 机器上调试路由表的工具?

在 Linux 机器上调试路由表的工具?

有没有可以在Linux机器上调试路由表的工具?

我的意思是,我可以通过在其中输入 IP 地址来使用它,它将考虑现有的路由表并输出表中的匹配项,这样我就可以知道数据包将去往何处?

答案1

使用ip route get。从配置网络路由:

ip route get命令是一个很有用的功能,它允许您查询系统将通过哪条路由发送数据包以到达指定的 IP 地址,例如:

# ip route get 23.6.118.140
23.6.118.140 via 10.0.2.2 dev eth0 src 10.0.2.15
cache mtu 1500 advmss 1460 hoplimit 64

在此示例中,发往 23.6.118.140 的数据包通过网关 10.0.2.2 从 eth0 接口发送出去。

答案2

将以下脚本保存在有用的地方。用你要测试的IP地址调用它,它会告诉你相应的路由。

#!/bin/bash
#
# Find the appropriate routing entry for a given IP address
########################################################################

########################################################################
# Calculate the base network address for a given addres and netmask
#
baseNet() {
    local ADDRESS="$1" NETMASK="$2"
    ipcalc -nb "$ADDRESS" "$NETMASK" | awk '$1=="Network:"{print $2}'
}

########################################################################
# Go
#
for IPADDRESS in "$@"
do
    netstat -rn |
        tac |
        while read DESTINATION GATEWAY GENMASK FLAGS MSS WINDOW IRTT IFACE
        do
            NSBASENET=$(baseNet "$DESTINATION" "$GENMASK")
            IPBASENET=$(baseNet "$IPADDRESS" "$GENMASK")
            if test "X$NSBASENET" = "X$IPBASENET"
            then
                if test '0.0.0.0' = "$GATEWAY"
                then
                    echo "Matches $DESTINATION with netmask $GENMASK directly on $IFACE"
                else
                    echo "Matches $DESTINATION with netmask $GENMASK via $GATEWAY on $IFACE"
                fi
                break
            fi
        done
done

# All done
#
exit 0

用法示例

./what-route.sh 10.0.5.6
Matches 0.0.0.0 with netmask 0.0.0.0 via 10.0.2.2 on eth0
./what-route.sh 10.0.2.6
Matches 10.0.2.0 with netmask 255.255.255.0 directly on eth0

相关内容