Extraindo seu endereço IP com shell script (egrep + awk)
Dica publicada em Shell Script / Expressões Regulares
Extraindo seu endereço IP com shell script (egrep + awk)
Dica rápida! Sempre que logo remoto no meu servidor, rodo um comando para liberar acesso à porta 3306 (MySQL) para meu IP dinâmico ADSL. Porém sempre era necessário dar um ifconfig local pra saber qual é meu IP para então executar o comando no servidor.
Bom, finalmente deixei a preguiça de lado e resolvi automatizar o processo, criando um comando que retorna meu IP no terminal do próprio servidor, algo similar à variável REMOTE_ADDR do PHP por exemplo.
Quando executa-se um "w" no terminal remoto, a seguinte resposta é obtida:
w
20:34:29 up 104 days, 9:09, 1 user, load average: 3.51, 3.54, 3.78
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
fabio pts/0 189.1.54.222 19:59 0.00s 0.19s 0.01s w
Note o campo FROM (189.1.54.222), é ele que queremos, este é o IP de sua máquina local. Então podemos extraí-lo filtrando a saída com um egrep e em seguida extraindo o IP com o awk. Veja:
w | egrep '[0-9\.]{6,}' | awk '{print $3}'
O comando joga a saída de "w" para o Extended Grep, que filtra a linha que possui um endereço IP - [0-9\.] significa qualquer sequência composta por números e pontos "." com no mínimo 6 caracteres (o mínimo de um IP que consegui imaginar: 0.0.0.0 [6 dígitos]). Por último o awk recebe a linha que possui o endereço IP e pega somente o 3° campo, que é o IP propriamente dito. Os 2 primeiros campos são o nome de usuário e o terminal que ele está usando.
Pra quem não tem servidor remoto e também quer testar a teoria, podemos adaptar o comando para descobrir o endereço de rede de suas interfaces locais. Fica como dever de casa entender o comando abaixo:
/sbin/ifconfig | grep 'inet end' | awk '{print $3}'
Bom, eu me ajudei com esse comando, espero que ele te ajude de alguma forma, seja com uma sintaxe nova de regexp ou com ideias para a criação de um shell script mais elaborado. :)
Um abraço.
Bom, finalmente deixei a preguiça de lado e resolvi automatizar o processo, criando um comando que retorna meu IP no terminal do próprio servidor, algo similar à variável REMOTE_ADDR do PHP por exemplo.
Quando executa-se um "w" no terminal remoto, a seguinte resposta é obtida:
w
20:34:29 up 104 days, 9:09, 1 user, load average: 3.51, 3.54, 3.78
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
fabio pts/0 189.1.54.222 19:59 0.00s 0.19s 0.01s w
Note o campo FROM (189.1.54.222), é ele que queremos, este é o IP de sua máquina local. Então podemos extraí-lo filtrando a saída com um egrep e em seguida extraindo o IP com o awk. Veja:
w | egrep '[0-9\.]{6,}' | awk '{print $3}'
O comando joga a saída de "w" para o Extended Grep, que filtra a linha que possui um endereço IP - [0-9\.] significa qualquer sequência composta por números e pontos "." com no mínimo 6 caracteres (o mínimo de um IP que consegui imaginar: 0.0.0.0 [6 dígitos]). Por último o awk recebe a linha que possui o endereço IP e pega somente o 3° campo, que é o IP propriamente dito. Os 2 primeiros campos são o nome de usuário e o terminal que ele está usando.
Pra quem não tem servidor remoto e também quer testar a teoria, podemos adaptar o comando para descobrir o endereço de rede de suas interfaces locais. Fica como dever de casa entender o comando abaixo:
/sbin/ifconfig | grep 'inet end' | awk '{print $3}'
Bom, eu me ajudei com esse comando, espero que ele te ajude de alguma forma, seja com uma sintaxe nova de regexp ou com ideias para a criação de um shell script mais elaborado. :)
Um abraço.