Encuentre la interfaz para la ruta a un host específico

14

En una máquina Linux multihomed, ¿cómo puedo saber qué interfaz de red se usará para enviar un paquete a un host específico? Necesito hacer esto mediante programación y prefiero no analizar e interpretar la tabla de enrutamiento yo mismo.

Rob H
fuente
Para eso es la tabla de enrutamiento. No me lo imagino de otra manera.
GioMac

Respuestas:

29

Úselo ip routepara esto. Por ejemplo:

ip route show to match 198.252.206.16
Michael Hampton
fuente
¡Perfecto! Gracias.
Rob H
11

Opción más corta:

ip route get 172.29.42.94
Alexey
fuente
5

Sí, como sugiere Michael Hampton, úsalo ip route. Si solo quieres la interfaz, usa esto

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

Por ejemplo:

# ip=8.8.8.8
# iface=$( ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}' )
# echo $iface
eth1
mivk
fuente