[unix] 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


답변