Use ip route
para isso. Por exemplo:
ip route show to match 198.252.206.16
Em uma máquina com Linux multihomed, como posso descobrir qual interface de rede será usada para enviar um pacote para um host específico? Eu preciso fazer isso programaticamente e prefiro não analisar e interpretar a tabela de roteamento eu mesmo.
Opção mais curta:
ip route get 172.29.42.94
Sim, como Michael Hampton sugere, use ip route
. Se você quer apenas a interface, use isso
ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}'
Por exemplo:
# ip=8.8.8.8
# iface=$( ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}' )
# echo $iface
eth1
Tags networking routing linux