Pular para o conteúdo

Extraindo seu endereço IP com shell script (egrep + awk)

Dica publicada em Shell Script / Expressões Regulares
Fábio Berbert de Paula fabio
Hits: 24.406 Categoria: Shell Script Subcategoria: Expressões Regulares
  • Indicar
  • Impressora
  • Denunciar

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.

Verificar se a tela do celular está bloqueada via ADB

ffmpeg - Como aumentar ou reduzir o volume de um áudio ou video via linha de comando

O que é samba

Apache2 - Forçando redirecionamento do site para o www

online_man - Páginas de manual online no terminal

Criando usuários a partir de uma lista

Ações condicionais no SED

SED - substituir apenas a ocorrência N de uma string

Eliminando linhas de comentário ou linhas em branco no Linux

Remover tags HTML com SED

#1 Comentário enviado por robsonsbrasil em 28/06/2009 - 11:40h
Dica muito boa Fábio parabéns.
#2 Comentário enviado por alan schein em 27/05/2013 - 16:03h
Interessante, muito bom pra pegar Ip da rede interna , gostaria de ssaber pra pegar da rede externa
#3 Comentário enviado por netpoint em 09/12/2015 - 12:15h
Amigo

Sua dica foi de grande valia, estou tentando montar um script para capturar o usuário e o IP e juntar as duas coisas em uma variável string e depois usar o conteúdo desta variável para abrir um sessão SSH usando o screen. O objetivo é este script fazer parte do .profile do usuário, assim, quando o usuário logar o sistema vera se existe alguma sessão ssh não encerrada e vai reconecta-la automaticamente na tentativa de novo login e fara isso a cada tentativa até que não exista mais nenhuma sessão pendente daquele usuário proveniente daquele IP, se não existir mais ele abre uma nova sessão screen.

Se puder ajudar com mais dicas eu agradeço

Contribuir com comentário

Entre na sua conta para comentar.