pega IP de sua máquina na NET -DNA do ratinho
Publicado por Geraldo Albuquerque (última atualização em 29/08/2011)
[ Hits: 8.071 ]
Homepage: twitter.com/AprendiNoLinux
Continuando o aprendizado, hoje um Script Shell bash para pegar o seu IP na NET.
Esta bem documentado, e dentro tem várias dúvidas que gostaria de receber um feedback do pessoal.
Só usei 2 itens pesquisados na net.
O site que pega o IP externo e uma formula que calcula se o danado para conferir se é válido.
#!/bin/bash 
#
#: package: Acessos (***)
#: file: meuipnet.sh
#: since: 2011-08-13 23:03 (GMT -03:00)
#: author: Geraldo T. Albuquerque - Twitter: @AprendiNoLinux ou @GA_Tux
#: version: 0.73a Alfa 
#: dir: Scripts/libs. ( Se usar independente, coloque em um dir do seu path
#------------------------------------------------------------------------------
#: objectives: Pega IP atual da máquina na Net, salva e mostra na tela.
#------------------------------------------------------------------------------ 
# Pode receber até 2 parâmetros.
# Em $1 = diretório + arquivo final com o ip, ex: /tmp/meu_ip_net.txt
# Em $2 = "IP" Só mostrará o nº do IP e mais nada.
# Caso não envie nenhum parâmetro, mostra na tela e gera aquivo padrão.
#------------------------------------------------------------------------------ 
#: comments: Contém dependência de serviços de terceiros. 
#:           Faz acesso ao site: whatismyip.com
#:           Você pode trocar o serviço por outro de sua preferência.
#------------------------------------------------------------------------------ 
#: TODO Falta melhorar recebimento de parâmetros.
#: XXX Não tenho certeza como fazer a validação do IP na net. HELP-ME
#: XXX Fiz vários testes com IPs válidos e inválidos. Não tenho IPv6 pra testes
#------------------------------------------------------------------------------
# Se adicionar no .bashrc (profile), deixe tudo configurado, exemplo:
# meuipnet /tmp/meuarquivo.txt  (Assim sempre mostrará na tela)
#------------------------------------------------------------------------------ 
function helping { 
    if [ "$_NUMERO_IP" = "" ] 
    then
          printf "# \ NÃO enviou o nº do IP, ex: valida.ip '192.169.045.232'%s\n" 
    fi
    if [ "$_NUMERO_IP" = "-h" ] 
    then
          printf "# Para validar informe a função e o IP, ex: valida.ip '192.169.045.232'%s\n" 
    fi
    read
}
function valida.ip() { 
    # Recebe no mínimo o número do IP em $1.
    # Se 1º parâmetro vier com -h, indica solicitação de help.
    # Se não passar parâmetro, avisa e indica como usar a função. 
    local _NUMERO_IP _NUMERO_VALIDO 
    [ "$1" ] && _NUMERO_IP="$1" || _NUMERO_IP=""
    # TODO Ideal seria tratar outros caracteres que podem vir do usuário.
    # FIXME Lembrar de incluir uma função de higienização. 
 
   _NUMERO_IP=$_NUMERO_IP | sed 's/[A-Za-z]//'
    if [ "$_NUMERO_IP" = "-h" ] 
    then
        helping "$_NUMERO_IP"
        return
    fi
    if [ "$_NUMERO_IP" = "" ] 
    then
        helping "$_NUMERO_IP"
        return 1
    fi
    _NUMERO_VALIDO=$(printf "${_NUMERO_IP}%s" | egrep '^(((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))\.){3}((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))$') 
   if test -z "$_NUMERO_VALIDO"; then
          printf "# Ip informado não é válido. %s\n" 2> /dev/null # aqui posso colocar um log futuramente.
        return 1   
   fi
    
}
function meuipnet { 
   
   # Suporta uso de alias nos comandos: rm (apagar) e mv (mover). 
   # Poderia usar o which -fpP [comando] para mostrar local real. 
   # Já o whereis faz parte de qualquer instalação, foi este então.
   # whereis - b [executável], retornará se encontrar: exec: /dir/exec
   # Deve ter n maneiras de fazer este teste. Por hora vai a POG.
   
   clear
   
   local _DIR_EXEC_MV _DIR_EXEC_RM _VALIDA_IP _SO_NUM_IP _ECHO_TRACO
   local _MEU_PENULTIMO_IP _MEU_IP_OLD _MEU_IP_NET RED NC
   local _ARQ_OLD _ARQ_ATUAL _ARQ_TMP _IP_IGUAL 
   
   _ECHO_TRACO="#------------------------------------------------------------------------------"
   RED='\e[1;31m'          # Vermelho berrando. 
   NC='\e[0m'              # Sem Côr
   _ARQ_OLD="/tmp/ip_net_old.txt"
   _ARQ_TMP="/tmp/tmp_ip_net.txt"
   _IP_IGUAL=0 # Default para IP diferente.
   _DIR_EXEC_MV=$(whereis -b mv | sed 's/mv: //')
   _DIR_EXEC_RM=$(whereis -b rm | sed 's/rm: //')
   # XXX Tem outra forma de usar o whereis sem usar o sed ? HELP-ME.
   # TODO Só o arquivo atual está sendo tratado em parâmetros.
   # Se passou o diretório e nome do arquivo final, será usado.
   # Outros arquivos irão ser gravados no diretório /tmp
   # Se não passou parâmetros, vai fazer o default.
   [ "$1" ] && _ARQ_ATUAL="$1" || _ARQ_ATUAL="/tmp/ip_net_agora.txt"
    
   # Talvez tenha avisado que vai querer só o número de IP e nada mais.
   [ "$2" ] && _SO_NUM_IP="$2" || _SO_NUM_IP="0"
   
   # Pegando o penúltimo ip. Prevendo problemas se não existir.
   if test -e "$_ARQ_OLD"; then
      
      _MEU_PENULTIMO_IP=$(cat "$_ARQ_OLD") 
   
   else
      
      _MEU_PENULTIMO_IP="Novo"
      
      printf "${_MEU_PENULTIMO_IP}%s\n" > "$_ARQ_OLD"
   
   fi
   # Testa se existe o arquivo. Carrega o arq. ou coloca "Novo" na var. 
   
   if test -e "$_ARQ_ATUAL"; then
      
      _MEU_IP_OLD=$(cat "$_ARQ_ATUAL") 
   
   else
      
      _MEU_IP_OLD="Novo" 
      
      printf "${_MEU_IP_OLD}%s\n" > "$_ARQ_ATUAL"
   
   fi
   # TODO Se desejar trocar de serviço, este é o local.
   # TODO Se não devolver somente o IP, veja o exemplo sem automação.
   # TODO Saiba que não existem garantias sobre este serviço.
   # ----> inicio automation. Pegar o IP atual e joga no arquivo
   # temporário. 
   # ----> 
   # ----> 
   wget http://automation.whatismyip.com/n09230945.asp -q -O "$_ARQ_TMP"
   
   _MEU_IP_NET=$(cat "$_ARQ_TMP") 
   # ----> 
   # ----> 
   # ----> fim do automation.
   # Caso o automation pare de funcionar, comente e use este abaixo.
   # Limpa tudo deixando apenas o número do IP atual.
   # ----> inicio da captura usando navegação normal.
   # ----> 
   # ----> 
   # wget http://www.whatismyip.com/tools/ip-address-lookup.asp -q -O "$_ARQ_TMP"
   # _MEU_IP_NET=$(cat "$_ARQ_TMP" | grep "IP:" | sed 's/.*value="// ; s/" .*//') 
   # ----> 
   # ----> 
   # ----> fim da captura da navegação normal da página.
   # Tentando verificar se o IP é válido. 
   # TODO Achei esta validação na net e nem lembro onde foi. 
    # FIXME Passado para uma função e quando tiver uma boa, alterar só lá.
#    source $HOME/TESTES/Scripts/libs/include.valida.ip.sh
    if valida.ip "${_MEU_IP_NET}"; then : else return 1; fi
   # Faz comparação para saber se o IP mudou.
   
   if [ "$_MEU_IP_NET" = "$_MEU_IP_OLD" ] && [ $_MEU_IP_OLD = $_MEU_PENULTIMO_IP ]
   then
      
       _IP_IGUAL=1 # Preventivamente não fará nada com os arquivos depois.
      
       # Só vai mostrar o IP atual padrão.
      
       if [ "$_SO_NUM_IP" != "IP" ]; then
         
           printf "${_ECHO_TRACO} %s\n" 
           printf "# Arq: $_ARQ_ATUAL - Ip NET: ${RED}$_MEU_IP_NET${NC}%s\n" 
           printf "${_ECHO_TRACO} %s\n"
      
       fi
   
    else
      
       # Mostrará IP atual, anterior e penúltimo.
      
       if [ $_MEU_IP_OLD="Novo" ];then _IP_IGUAL=0;fi 
        # Força atualizar quando é novo.  
      if [ "$_SO_NUM_IP" != "IP" ]; then
         
         printf "${_ECHO_TRACO}%s\n"
         printf "#  Ip é: ${RED}${_MEU_IP_NET}${NC} Anterior: ${_MEU_IP_OLD} Penúltimo: ${_MEU_PENULTIMO_IP}%s\n" 
         printf "${_ECHO_TRACO}%s\n"
      
          fi
   
   fi
   
   if [ "$_IP_IGUAL" -eq 0 ]; then
      
        # IP atual foi alterado. # Removendo o arquivo anterior
      
       if test -e "$_ARQ_OLD"; then $_DIR_EXEC_RM -f "$_ARQ_OLD"; fi
      
       # Move/Renomeia do arq. atual que já existia antes. 
      
       if test -e "$_ARQ_ATUAL"; then $_DIR_EXEC_MV -f "$_ARQ_ATUAL" "$_ARQ_OLD"; fi
      
       # Agora posso salvar o IP que chegou diferente.
      
       printf "${_MEU_IP_NET}%s" > $_ARQ_ATUAL
   
   fi
   # Verifica se passou o 2º parâmetro com a string "IP"
   # Se ela foi passada, irá retornar apenas o IP
   
   if [ "$_SO_NUM_IP" = "IP" ]; then printf "${_MEU_IP_NET}%s\n"; fi
} 
   
myvar= meuipnet "$1" "$2"
#meuipnet
#=======================================
# Variáveis todas locais:
# mode:shell-script
# sh-shell:bash
# End:
#======================================= 
      
Mudando a resolução de arquivos JPG
Solução para bloquear totalmente o Facebook em sua rede
Instalador automático nVIDIA para Debian
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (14)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)
Problema em SSD ao dar boot LinuxMint LMDE FAYE 64 (3)









