Ip
在 Linux 機器上調試路由表的工具?
是否有在 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