pega IP de sua máquina na NET -DNA do ratinho

Publicado por Geraldo Albuquerque (última atualização em 29/08/2011)

[ Hits: 7.562 ]

Homepage: twitter.com/AprendiNoLinux

Download meuipnet.sh




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.

  



Esconder código-fonte

#!/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:
#======================================= 

      

Scripts recomendados

Pinga vários IPs, tentando descobrir o hostname e MAC

plaspkg

Lista de Vetores

Converter arquivos CBR para PDF

Monitor de usuarios


  

Comentários
[1] Comentário enviado por removido em 06/11/2011 - 03:36h

vou testar...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts