Descobrindo IP externo da linha de comando do FreeNAS

2

Existe alguma função de linha de comando dentro do derivativo FreeNAS (FreeBSD) que poderia retornar meu endereço externo? Desde que o mesmo endereço é sincronizado com DynDns (via roteador), em C # eu recuperei isso via consulta DNS assim:

var hostEntry = Dns.GetHostEntry("myexternalname.dyndns.org");
foreach (var iAddress in hostEntry.AddressList) {
    if (iAddress.AddressFamily == AddressFamily.InterNetwork) {
        MessageBox.Show(iAddress);
    }
}
    
por Josip Medved 27.08.2009 / 08:30

3 respostas

2

Eu encontrei o comando que funciona no FreeNAS.

# host myexternalname.dyndns.org

Retorna

myexternalname.dyndns.org      A       89.172.197.320

A partir disso, uso apenas o awk:

host myexternalname.dyndns.org | awk '{ print $3; }'

e que retorna apenas IP:

89.172.197.320

P.S. Eu sei que 89.172.197.320 não é um endereço IP real. Escrevi assim para não compartilhar meu endereço IP (ou endereço IP de outra pessoa).

P.P.S. Obrigado pela ajuda a Kronick e Avery Payne, já que suas idéias me levaram na direção certa.

    
por 27.08.2009 / 20:49
2

Pré-requisitos

  • dig
  • gnu grep
  • gnu tr
  • gnu awk
  • classificar
  • uniq

De uma linha de comando:

dig yourserver.dyndns.org | grep "IN" | grep "[0-9]" | awk '{print $5}' | sort | uniq 

O bom:

  • A sequência de tubos muito simples retorna no mínimo um endereço IP.
  • Pode manipular vários endereços IP para o mesmo nome.

O ruim:

  • envia o texto como resultado, o que significa que você provavelmente precisará de um redirecionamento para um arquivo
  • Posso pensar em pelo menos um caso extremo em que esse script pode falhar, embora seja "bom o suficiente"

O feio:

  • O script está longe do ideal. Eu acabei de bater em alguns minutos.
  • Existem muitas dependências de linha de comando.
  • Embora os comandos sejam bastante genéricos, a cadeia de ferramentas é específica do GNU.
  • Melhor escrito em perl ou python como um script monolítico.
por 27.08.2009 / 09:58
2

aqui está o meu comando favorito:

wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

simples. Claro. e se você tiver curl:

curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
    
por 27.08.2009 / 15:32