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

1. Shell Script bash pega IP de sua máquina na NET -DNA do ratinho

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 13/08/2011 - 23:55h

Olá moderadores e colaboradores.
Continuando o aprendizado, hoje um Script Shell bash para pegar o seu IP na NET.
Não tenho a menor ideia de como pode ser feito para quem usa proxy e outros bichos.
Esta bem documentado, e dentro tem várias dúvidas que gostaria de receber um feedback do pessoal.

Pode mandar o verbo e dar opiniões e palpites para melhorar ele.
Só usei 2 itens pesquisados na net.
O site que pega o IP externo e uma formula que calcula se o danado é 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 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

# TODO Só o arquivo atual está sendo tratado em parâmetros.
_ARQ_ATUAL="/tmp/ip_net_agora.txt"
_ARQ_OLD="/tmp/ip_net_old.txt"
_ARQ_TMP="/tmp/tmp_ip_net.txt"

# Se passou o diretório e nome do arquivo final, será usado.
# Outros arquivos irá gravar no diretório /tmp
[ $1 ] && _ARQ_ATUAL=$1

# Talvez tenha avisado que vai querer só o número de IP e nada mais.
[ $2 ] && _SO_NUM_IP=$2

_IP_IGUAL=0 # Default para IP diferente.

# XXX Tem outra forma de usar o whereis sem usar o sed ? HELP-ME.
_DIR_EXEC_MV=$(whereis -b mv | sed 's/mv: //')
_DIR_EXEC_RM=$(whereis -b rm | sed 's/rm: //')

# 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"
echo $_MEU_PENULTIMO_IP > "$_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"
echo $_MEU_IP_OLD > "$_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.
_VALIDA_IP=$(echo $_MEU_IP_NET | 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 "$_VALIDA_IP"
then

# Não validou o IP, vai abortar processo.
# TODO Testei bastante e parece estar funcionando. Testem e feedback.
_VALIDA_IP=0 # Forçando valor 0 ( falha )

# Lança um alerta sobre a falha na validação do número do IP.
echo -e "# ${RED} NÃO VALIDOU seu IP: {NC}]$_MEU_IP_NET "

# XXX Tenho dúvida das diferenças no na saída do exit.
# XXX Quando deve ser vazio, 0,1,2. ? HELP-ME.
exit 1 # Padrão de retorno de Erro
fi

# Faz comparação para saber se o IP mudou.
if [ "$_MEU_IP_NET" == "$_MEU_IP_OLD" ] || [ "$_MEU_IP_OLD" == "Novo" ]
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
echo
echo -e "$_ECHO_TRACO"
echo -e "# Arq: $_ARQ_ATUAL - Ip NET: [${RED}$_MEU_IP_NET${NC}] "
echo -e "$_ECHO_TRACO"
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
echo
echo -e "$_ECHO_TRACO"
echo -e "# Ip é: [${RED}$_MEU_IP_NET${NC}] Anterior: [$_MEU_IP_OLD] Penúltimo: [$_MEU_PENULTIMO_IP]"
echo -e "$_ECHO_TRACO"
fi
fi
if [ "$_IP_IGUAL" -eq 0 ] # IP atual foi alterado.
then
# 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.
echo $_MEU_IP_NET > $_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
echo "$_MEU_IP_NET"
fi
}

# $1 = arq de saída. $2 = "IP" só mostra o número.
# Se não enviar parâmetros, assume que você quer ver o IP formatado.
meuipnet $1 $2

exit 0

#==============================================================================
# Variáveis todas locais:
# mode:shell-script
# sh-shell:bash
# End:
#==============================================================================


OOps: Não enviado em dicas e nem em Scripts porque até hoje a minha 1ª dica não foi publicada e nem retorno de que estava ruim ou onde poderia ser melhorada. Se não receber o devido respeito pelo retorno, fica difícil colaborar. Como vou aprender se não tem retorno ?

https://twitter.com/#!/AprendiNoLinux/status/102582364626100224 @GA_Tux
[editado]
Incluindo o code...
[/editado]




  


2. Re: Shell Script bash pega IP de sua máquina na NET -DNA do ratinho

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 14/08/2011 - 01:51h

Mandei e-mail a alguns dias para você.

Abraços


3. Re: Shell Script bash pega IP de sua máquina na NET -DNA do ratinho

4. Re: Shell Script bash pega IP de sua máquina na NET -DNA do ratinho

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 14/08/2011 - 22:05h

Compactado e não documentado. Tem diferenças de controle.
====================================

#!/bin/bash
#: file: meu_ip_light.sh (Retirado comentários e dados extras)
#: since: 2011-08-14 23:03 (GMT -03:00)
#: author: Geraldo T. Albuquerque - Twitter: @AprendiNoLinux ou @GA_Tux
#: version: 1.0 final - Sai que é sua Tafarel.
#------------------------------------------------------------------------------
#: objectives: Só pega IP na net e compara com o último gravado.
#------------------------------------------------------------------------------

function meuipnet {

clear
local _DIR_EXEC_RM _VALIDA_IP _SO_NUM_IP _ECHO_TRACO _MEU_IP_NET RED NC _ARQ_ATUAL _ARQ_TMP _vl
RED='\e[1;31m' ; NC='\e[0m'
_ARQ_TMP="/tmp/tmp_ip_tmp.tmp" ; _ARQ_ATUAL="/tmp/ip_net_agora.txt"
_DIR_EXEC_RM=$(whereis -b rm | sed 's/rm: //') ; _MEU_IP_NET="Nenhum"
[ $1 ] && _ARQ_ATUAL="$1"; [ $2 ] && _SO_NUM_IP="$2"
wget http://automation.whatismyip.com/n09230945.asp -q -O "$_ARQ_TMP"
if test -e "$_ARQ_ATUAL"; then _MEU_IP_NET=$(cat "$_ARQ_ATUAL"); fi
if test -e "$_ARQ_TMP"; then _ARQ_TMP=$(cat "$_ARQ_TMP"); fi
_vl='^(((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]))$'
_VALIDA_IP=$(printf "${_ARQ_TMP}%s" | egrep "$_vl")
if test -z "$_VALIDA_IP"; then
printf "# ${RED} NÃO VALIDOU seu IP. Veja: ${_VALIDA_IP}%s\n"
exit 1 # Padrão de retorno de Erro
fi
if [ "$_SO_NUM_IP" == "IP" ]; then
printf "${_VALIDA_IP}%s\n"
else
if [ "$_MEU_IP_NET" == "$_VALIDA_IP" ]; then
printf "# Ip NET: [${RED}$_MEU_IP_NET${NC}]%s\n"
else
printf "# Ip é: [${RED}${_VALIDA_IP}${NC}] Anterior: ${_MEU_IP_NET}%s\n"
fi
fi
if test -e "$_MEU_IP_NET"; then $_DIR_EXEC_RM -f "$_ARQ_ATUAL"; fi
printf "${_VALIDA_IP}%s" > $_ARQ_ATUAL #Grava IP atual.
}

# Se usar Standalone ou no arq .bashrc, altere "nomearq.txt" e "$2" para "IP"
meuipnet "/tmp/ip_net.txt" "$2"

#EOF


====================================
oops: Definitivamente o visual deste último é bem pior de ler o código.

[editado]
Incluído o code 08-10-2011-10:36:01
[/editado]



5. Re: Shell Script bash pega IP de sua máquina na NET -DNA do ratinho

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/08/2011 - 22:15h

funciona

#------------------------------------------------------------------------------
# Arq: /tmp/ip_net_agora.txt - Ip NET: [187.47.154.127]
#------------------------------------------------------------------------------



6. Re: Shell Script bash pega IP de sua máquina na NET -DNA do ratinho

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 16/08/2011 - 11:34h

Valeu @cros pelo feedback ;)