Localizar interface para rota para host específico

14

Em uma máquina Linux com hospedagem múltipla, como posso descobrir qual interface de rede será usada para enviar um pacote para um host específico? Preciso fazer isso programaticamente e prefiro não analisar e interpretar a tabela de roteamento.

Rob H
fonte
É para isso que serve a tabela de roteamento. Eu não imagino o contrário.
GioMac

Respostas:

29

Use ip routepara isso. Por exemplo:

ip route show to match 198.252.206.16
Michael Hampton
fonte
Perfeito! Obrigado.
21713 Robbie H
11

Opção mais curta:

ip route get 172.29.42.94
Alexey
fonte
5

Sim, como Michael Hampton sugere, use ip route. Se você deseja apenas a interface, use este

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
mivk
fonte