pega IP de sua máquina na NET -DNA do ratinho
Publicado por Geraldo Albuquerque (última atualização em 29/08/2011)
[ Hits: 7.739 ]
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: #=======================================
Crie bash scripts "on-the-fly"
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
Erro ao iniciar serviço samba4 como novo dc em um ambiente com ad (5)
Descompactar arquivos winrar no linux (7)
É possível baixar o dicionário pt-br para /usr/share/dict no Linux Min... (0)