pega IP de sua máquina na NET -DNA do ratinho
Publicado por Geraldo Albuquerque (última atualização em 29/08/2011)
[ Hits: 8.072 ]
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:
#=======================================
GoogleChromeUpdate.sh para Slackware
Browser - use rofi para acessar páginas na web
Previsão do tempo em cores no terminal
Rastreando suas encomendas dos Correios
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
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] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









