Estoy haciendo un script y necesito detectar por qué interfaz pasa el tráfico de una IP. Esto se debe a que en Arch, solo se atiende una dirección IP para una de las cuatro NIC, pero puede ser cualquiera de esas cuatro.
La forma manual que hice fue ejecutar un tcpdump: si veo paquetes, entonces esta es la interfaz; de lo contrario, cancele tcpdump y realice otro tcpdump en otra interfaz.
Estoy ejecutando FreeBSD.
Respuesta1
Llamarroute get
.
route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'
Respuesta2
netstat -tau
muestra la dirección local y el puerto utilizado por un programa. Cada interfaz tiene su propia dirección, excepto casos como el de vinculación... ¿Es esa la información que necesitas?
Si es así, es fácil grep
y cut
el resultado es usarlo en un script.
Por ejemplo:
netstat -taunpe | grep firefox | awk '{print $4}' | cut -d ':' -f 1
recupera la dirección local utilizada por las conexiones que "firefox" ha establecido.
Respuesta3
No estoy seguro acerca de *BSD, pero en Linux route -n
te indica (aparte de otras cosas) banderas (probablemente querrás buscar la línea que está marcada como ruta predeterminada) y el nombre del dispositivo:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.100.63.254 0.0.0.0 UG 0 0 0 eth0
10.100.0.0 0.0.0.0 255.255.192.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
o:
$ ip route
default via 10.100.63.254 dev eth0
10.100.0.0/18 dev eth0 proto kernel scope link src 10.100.12.38
127.0.0.0/8 dev lo scope link
169.254.0.0/16 dev eth0 scope link