Obter IP do gateway wifi?

0

Depois de conectar manualmente minha interface Wi-Fi a um ponto de acesso com:

iwconfig $wifi essid "$1"
dhclient $wifi
# ... $wifi = wlan3

Estou achando que preciso executar:

route add default gw 192.168.12.1 $wifi

Para realmente funcionar. Eu sei que 192.168.12.1 é o IP do ponto de acesso aqui, mas eu preciso de uma maneira programática de determinar que uma vez conectado.

O mais próximo que encontrei está executando route -n , que inclui a linha:

...
192.168.12.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan3

Foi-me dito que dado 192.168.12.0 aqui não posso assumir automaticamente 192.168.12.1 , que o último número poderia ser diferente.

Alguém sabe de uma forma programática que eu posso obter 192.168.12.1 aqui?

Atualização: encontrei um arquivo chamado /var/lib/dhcp/dhclient.wlan3.leases . Quando eu grep o IP do ponto de acesso eu vejo listado várias vezes. Ainda não tenho certeza de qual opção seria a melhor para analisar.

Resultados de cat /var/lib/dhcp/dhclient.wlan3.leases | grep 192.168.12.1 :

  fixed-address 192.168.12.120;
  option routers 192.168.12.1;
  option dhcp-server-identifier 192.168.12.1;
  option domain-name-servers 192.168.12.1;
  fixed-address 192.168.12.120;
  option routers 192.168.12.1;
  option domain-name-servers 192.168.12.1;
  option dhcp-server-identifier 192.168.12.1;

Atualização # 2: Usando outro dispositivo em que nunca executei route add ... , mas executei o primeiro comando listado. Eu acho que o arquivo de concessão do dhclient não existe. Talvez tenha sido o comando route que criou este arquivo?

    
por Philip Kirkbride 14.11.2017 / 19:18

2 respostas

2

Você pode usar o seguinte comando para imprimir o gatway:

ip route show | awk '/default/ { print $3 }'

ou

netstat -n -r | awk '/UG/ { print $2 }'

ou

netstat -n -r | grep 'UG\|*wlan3$' | awk '{print $2}'
    
por 14.11.2017 / 19:37
1

Algo como:

grep routers /var/lib/dhclient/dhclient-eth0.leases |sort -u |cut -d ' ' -f 5 |sed -e 's/;//'

gerará o IP necessário.

sort -u fornece uma lista de linhas exclusivas, como option routers 192.168.25.1;

cut -d ' ' -f 5 divide a linha por espaços e fornece o campo 5, que é 192.168.25.1 e, em seguida, o sed -e 's/;//' remove o ponto-e-vírgula final.

    
por 14.11.2017 / 19:34