Найти интерфейс для маршрута к конкретному хосту

14

На машине с несколькими компьютерами Linux, как я могу узнать, какой сетевой интерфейс будет использоваться для отправки пакета на определенный хост? Мне нужно сделать это программно, и я бы предпочел не разбирать и не интерпретировать таблицу маршрутизации самостоятельно.

Роб Х
источник
Вот для чего нужна таблица маршрутизации. Я не представляю это иначе.
GioMac

Ответы:

29

Используйте ip routeдля этого. Например:

ip route show to match 198.252.206.16
Майкл Хэмптон
источник
Отлично! Спасибо.
Роб Х
11

Более короткий вариант:

ip route get 172.29.42.94
Алексей
источник
5

Да, как предполагает Майкл Хэмптон, используйте ip route. Если вы хотите только интерфейс, используйте этот

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

Например:

# ip=8.8.8.8
# iface=$( ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}' )
# echo $iface
eth1
mivk
источник