Назад | Перейти на главную страницу

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

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

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

ip route show to match 198.252.206.16

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

ip route get 172.29.42.94

Да, как предлагает Майкл Хэмптон, используйте 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