Ip

在 Linux 機器上調試路由表的工具?

  • March 23, 2015

是否有在 Linux 機器上調試路由表的工具?

我的意思是我可以通過在其中輸入一個 IP 地址來使用它,它會考慮現有的路由表並從表中輸出匹配項,這樣我就可以知道數據包的去向?

使用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 介面發送出去。

將以下腳本保存在有用的地方。使用您要測試的 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

引用自:https://unix.stackexchange.com/questions/192008