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}'
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?
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.
Tags networking wifi