Znajdź interfejs dla trasy do konkretnego hosta

14

Jak mogę dowiedzieć się na interfejsie sieciowym z wieloma systemami Linux, jaki interfejs sieci będzie używany do wysyłania pakietu do określonego hosta? Muszę to zrobić programowo i wolałbym nie analizować i samodzielnie interpretować tabeli routingu.

Rob H.
źródło
Do tego służy tabela routingu. Nie wyobrażam sobie inaczej.
GioMac,

Odpowiedzi:

29

Użyj ip routedo tego. Na przykład:

ip route show to match 198.252.206.16
Michael Hampton
źródło
Doskonały! Dziękuję Ci.
Rob H
12

Krótsza opcja:

ip route get 172.29.42.94
Alexey
źródło
5

Tak, jak sugeruje Michael Hampton, użyj ip route. Jeśli potrzebujesz tylko interfejsu, użyj tego

ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}'

Na przykład:

# ip=8.8.8.8
# iface=$( ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}' )
# echo $iface
eth1
mivk
źródło