Encontre a interface para rota para um host específico

10

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.

    
por Rob H 17.08.2013 / 19:58

3 respostas

22

Use ip route para isso. Por exemplo:

ip route show to match 198.252.206.16
    
por 17.08.2013 / 20:03
4

Opção mais curta:

ip route get 172.29.42.94
    
por 17.11.2014 / 16:03
3

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
    
por 06.07.2014 / 15:42