pega IP de sua máquina na NET -DNA do ratinho
Publicado por Geraldo Albuquerque (última atualização em 29/08/2011)
[ Hits: 7.745 ]
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: #=======================================
Counter Strike Dedicated Server
DioPSI - Script multidistro para instalar programas
Cadastrando usuários no Squid através de Shell Script
Descobre e bloqueia o IP de quem mais tem conexão no servidor
Script para listar tentativas de acessos
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (9)