Ligue para route get
.
route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'
Estou fazendo um script e preciso detectar em qual interface o tráfego de um IP está passando. Isso ocorre porque, no arco, um endereço IP é atendido apenas por uma das quatro NICs, mas pode ser qualquer uma dessas quatro.
A maneira manual que fiz foi executar um tcpdump: se eu vejo pacotes, então esta é a interface; se não, cancele o tcpdump e faça outro tcpdump em outra interface.
Estou executando o FreeBSD.
Ligue para route get
.
route get 192.0.2.42 | awk '$1 ~ /interface/ {print $2}'
netstat -tau
mostra o endereço local e a porta usada por um programa. Cada interface tem seu próprio endereço, exceto casos como ligação ... Essa é a informação que você precisa?
Se for isso, é fácil para grep
e cut
a saída usá-la em um script.
Por exemplo: %código% recupera o endereço local usado pelas conexões "firefox" estabelecidas.
Não tenho certeza sobre * BSDs, mas no Linuxes route -n
informa (além de outras coisas) sinalizadores (você provavelmente desejará procurar a linha marcada como rota padrão) e o nome do 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
ou:
$ 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
Tags networking ip routing freebsd