Detectar por qué interfaz pasa el tráfico a una dirección IP

Detectar por qué interfaz pasa el tráfico a una dirección IP

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 -taumuestra 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 grepy cutel 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 -nte 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

información relacionada