Como posso obter meu endereço IP externo em um script de shell?

252

Eu preciso encontrar meu endereço IP externo de um script de shell. No momento eu uso essa função:

myip () { 
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}

Mas isso depende de perl-libwww , perl-html-format , perl-html-tree instalado. Que outras maneiras posso obter meu IP externo?

    
por Eugene Yarmash 14.10.2011 / 16:40

23 respostas

399

Eu recomendaria obtê-lo diretamente de um servidor DNS.

A maioria das respostas aqui passa por HTTP para um servidor remoto. Alguns deles exigem a análise da saída ou dependem do cabeçalho User-Agent para que o servidor responda em texto simples. Eles também mudam com bastante frequência (diminuem, mudam de nome, exibem anúncios, podem alterar o formato de saída, etc.).

  1. O protocolo de resposta do DNS é padronizado (o formato permanecerá compatível).
  2. Historicamente, os serviços de DNS ( OpenDNS , DNS público do Google , ..) tendem a sobreviver por muito mais tempo e são mais estáveis, mais escalonáveis e geralmente mais procurados do que qualquer serviço novo do whatismyip.com que esteja quente hoje em dia.
  3. Esse método é inerentemente mais rápido (seja apenas alguns milissegundos!).

Usando dig com OpenDNS como resolver:

dig @resolver1.opendns.com ANY myip.opendns.com +short

Talvez alias no seu bashrc , por isso é fácil lembrar

alias wanip='dig @resolver1.opendns.com ANY myip.opendns.com +short'

Responde com um endereço IP simples:

$ wanip
80.100.192.168 # or, 2606:4700:4700::1111

Sintaxe

Abreviado de link :

usage:  dig [@global-server] [q-type] host {local-d-opt}

    q-type   one of (A, ANY, AAAA, TXT, MX, ...). Default: A.

    q-opt    one of:
             -4                  (use IPv4 query transport only)
             -6                  (use IPv6 query transport only)
             ...

    d-opt    ...
             +[no]short          (Display nothing except short form of answer)
             ...

O tipo de consulta ANY retorna um registro AAAA ou A. Para preferir a conexão IPv4 ou IPv6 especificamente, use as opções -4 ou -6 de acordo.

Para exigir que a resposta seja um endereço IPv4, substitua ANY por A ; para IPv6, substitua-o por AAAA . Observe que ele só pode retornar o endereço usado para a conexão. Por exemplo, ao conectar via IPv6, ele não pode retornar o endereço A.

Servidores e exemplos alternativos

Além do OpenDNS, a Akamai e o Google oferecem uma capacidade semelhante por meio de seus serviços de DNS:

$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

Exemplo de alias que solicita especificamente um endereço IPv4:

alias wanip4='dig @resolver1.opendns.com A myip.opendns.com +short -4'

$ wanip4
80.100.192.168

E IPv6:

alias wanip6='dig @resolver1.opendns.com AAAA myip.opendns.com +short -6'

$ wanip6
2606:4700:4700::1111

Resolução de problemas

Se o comando não estiver funcionando por algum motivo, pode haver um problema com o provedor upstream, a ferramenta de linha de comando ou qualquer outra coisa. Para ajudar a entender por que ele não está funcionando, execute o comando sem a opção +short para revelar os detalhes da consulta DNS. Por exemplo:

$ dig @resolver1.opendns.com ANY myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  ANY

;; ANSWER SECTION:
myip.opendns.com.   0   IN  AAAA    2606:4700:4700::1111

;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011
    
por 04.07.2013 / 04:53
134

NOTA: trata-se do endereço IP externo (aquele que os servidores da Internet veem quando você se conecta a eles) - se você quiser um IP interno endereço (aquele que seu próprio computador está usando para conexões, que pode ser diferente) veja esta resposta .

TL; DR - Métodos mais rápidos em 2015

O método mais rápido usando o DNS:

dig +short myip.opendns.com @resolver1.opendns.com

ou usando externalip :

externalip dns

O mais rápido usando HTTP:

curl -s http://whatismyip.akamai.com/

ou usando externalip:

externalip http

O mais rápido usando HTTPS com um certificado válido:

curl -s https://4.ifcfg.me/

ou usando externalip:

externalip https

Usando o telnet:

Com o comando nc :

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

ou usando externalip:

externalip telnet

Com o comando telnet :

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

Usando o FTP:

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

ou usando externalip:

externalip ftp

Todas as opções acima podem ser executadas usando meu script externalip como:

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

Agora, uma longa história ...

Existem muitas opções de servidores diferentes fornecendo o IP externo, especialmente via HTTP postado aqui ou em outro lugar.

Eu fiz uma referência para ver se algum deles é melhor que os outros e fiquei surpreso com os resultados. Por exemplo. Um dos ifconfig.me mais amplamente recomendado foi quase sempre o mais lento para mim, às vezes levando muitos segundos para responder. Muitos não trabalham com HTTPS ou trabalham, mas possuem certificados inválidos. Alguns têm tempos de resposta muito inconsistentes.

Referências

HTTP e HTTPS

Esta é a fonte do meu script externalip-benchmark que usei:

Você pode executá-lo para ver quais serviços mencionados aqui valem a pena usar:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

Meus resultados que obtive em 2015-04-03 de Varsóvia - os endereços foram alterados para proteger os inocentes:

Melhores tempos de resposta HTTP:

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

Melhor tempo de resposta de https:

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(Nota: existem algumas respostas rápidas com conteúdo vazio - são inválidas.)

Melhor tempo médio de ping:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

Aqui estão os resultados que obtive em 2015-04-03 de Amsterdã:

Melhores tempos de resposta HTTP:

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

Melhor tempo de resposta de https:

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

Melhor tempo médio de ping:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(Os 999999 pings significam 100% de perda de pacotes.)

DNS

Para uma comparação, há momentos em que outros métodos são testados em Varsóvia e em Amsterdã, em 2015-06-16.

Usando:

time dig +short myip.opendns.com @resolver1.opendns.com

geralmente leva (tempo real do relógio de parede) sobre:

  • 0,035s de Varsóvia
  • 0,015s de Amsterdã

Na verdade, existem quatro resolvedores que podem ser usados dessa maneira:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

Todos eles dão os mesmos tempos de resposta em Varsóvia e Amsterdã, mas isso pode não ser o caso em outros locais.

Usando o 208.67.222.222 - o IP do resolver1.opendns.com, em vez de seu nome de domínio, é mais rápido:

  • 0,023s de Varsóvia
  • 0,009s de Amsterdã

mas pode não funcionar no futuro se o IP alguma vez mudar (embora possa ser improvável para um resolvedor de DNS bem conhecido - talvez eu deva usar o IP no meu externalip script - por favor, comente.

Telnet

O comando

Telnet com nc ou telnet (veja acima) geralmente leva:

  • 0,103s de Varsóvia
  • 0,035s de Amsterdã

(Não há diferença perceptível entre os comandos nc e telnet .)

FTP

  • 0.104s de Varsóvia
  • 0,036s de Amsterdã

Nomes de domínio

Todos os métodos serão mais rápidos (especialmente quando executados pela primeira vez) quando os endereços IP forem usados em vez dos nomes de domínio dos serviços fornecidos (exceto com HTTP que pode usar servidores virtuais baseados em host e não funcionar com IP desencapado - não testado), mas deixará de funcionar quando os serviços alterarem o endereço IP, para que ele seja mais rápido, mas menos resistente ao futuro.

Comentários

Se você vir alguns resultados interessantes de sua localização ou se achar que alguns outros hosts devem ser recomendados, em vez daqueles que eu escolhi, poste um comentário. Se algum serviço importante estiver faltando, por favor, comente ou publique um problema no GitHub. Gostaria de manter este post atualizado com uma escolha atual de serviços de melhor desempenho.

    
por 03.04.2015 / 03:37
77
 curl -s http://whatismijnip.nl |cut -d " " -f 5

Site substituído por um holandês trabalhando.

    
por 14.10.2011 / 16:49
51

Desde whatsmyip.org e ifconfig.me já foram mencionado:

curl -s icanhazip.com
    
por 06.11.2011 / 11:52
18

Você pode usar o ifconfig.me como alternativa ao whatismyip.org.

curl -s http://ifconfig.me

Além disso, o ifconfig.me tem algumas funcionalidades adicionais. Para descobrir que outras informações você pode receber, visite o site.

    
por 28.10.2011 / 23:10
15
wget -O - -q http://whatismyip.org/
    
por 14.10.2011 / 17:34
10

Amazon AWS

curl https://checkip.amazonaws.com

Exemplo de saída:

123.123.123.123

Eu gosto porque:

  • retorna apenas o IP de texto simples, nada mais
  • é de um fornecedor bem conhecido que provavelmente não ficará offline em breve
por 21.12.2015 / 23:09
9

Eu prefiro usar curlmyip.com É tão simples como:

curl curlmyip.com

É curto e simples de lembrar.

    
por 15.05.2013 / 03:32
8
curl ident.me

OR

curl ifconfig.me

OR

curl tnx.nl/ip

OR

curl ipecho.net/plain

OR

curl ip.appspot.com

OR

curl whatismyip.akamai.com

OR

curl icanhazip.com

OR

curl wgetip.com

OR

curl ip.tyk.nu

OR

curl curlmyip.com

OR

curl corz.org/ip

OR

curl bot.whatismyipaddress.com

Referência

    
por 06.05.2014 / 12:45
6
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
    
por 21.10.2011 / 11:11
4

Se, depois de ler todas essas sugestões, você quiser ler ainda mais, aqui está um script de Bash indiscutivelmente superprojetado.

Ele contém uma lista de servidores DNS e HTTP que parecem funcionar bem a partir de fevereiro de 2017.

Se você tem dig , primeiro tenta o DNS, que é quase uma ordem de magnitude mais rápida que os vários serviços HTTP.

Ele sai na primeira resposta.

Se você não tiver dig ou se todos os servidores DNS falharem, ele tentará os serviços HTTP até receber uma resposta.

Os servidores são listados em ordem alfabética, mas são embaralhados antes de serem usados para evitar usar sempre o mesmo.

#!/bin/bash

## Get my external IP

timeout=2   # seconds to wait for a reply before trying next server
verbose=1   # prints which server was used to STDERR

dnslist=(
    "dig +short            myip.opendns.com        @resolver1.opendns.com"
    "dig +short            myip.opendns.com        @resolver2.opendns.com"
    "dig +short            myip.opendns.com        @resolver3.opendns.com"
    "dig +short            myip.opendns.com        @resolver4.opendns.com"
    "dig +short    -t txt  o-o.myaddr.l.google.com @ns1.google.com"
    "dig +short -4 -t a    whoami.akamai.net       @ns1-1.akamaitech.net"
    "dig +short            whoami.akamai.net       @ns1-1.akamaitech.net"
)

httplist=(
    4.ifcfg.me
    alma.ch/myip.cgi
    api.infoip.io/ip
    api.ipify.org
    bot.whatismyipaddress.com
    canhazip.com
    checkip.amazonaws.com
    eth0.me
    icanhazip.com
    ident.me
    ipecho.net/plain
    ipinfo.io/ip
    ipof.in/txt
    ip.tyk.nu
    l2.io/ip
    smart-ip.net/myip
    tnx.nl/ip
    wgetip.com
    whatismyip.akamai.com
)



# function to shuffle the global array "array"
shuffle() {
   local i tmp size max rand
   size=${#array[*]}
   max=$(( 32768 / size * size ))
   for ((i=size-1; i>0; i--)); do
      while (( (rand=$RANDOM) >= max )); do :; done
      rand=$(( rand % (i+1) ))
      tmp=${array[i]} array[i]=${array[rand]} array[rand]=$tmp
   done
}


## if we have dig and a list of dns methods, try that first
if hash dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
    eval array=( \"\${dnslist[@]}\" )
    shuffle

    for cmd in "${array[@]}"; do
        [ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
        ip=$(timeout $timeout $cmd)
        if [ -n "$ip" ]; then
            echo $ip
            exit
        fi
    done
fi


# if we haven't succeeded with DNS, try HTTP

if [ ${#httplist[*]} == 0 ]; then
    echo "No hosts in httplist array!" >&2
    exit 1
fi

# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);

if [ -z "$curl_or_wget" ]; then
    echo "Neither curl nor wget found. Cannot use http method." >&2
    exit 1
fi

eval array=( \"\${httplist[@]}\" )
shuffle

for url in "${array[@]}"; do
    [ "$verbose" == 1 ] && echo Trying: $curl_or_wget  "$url" 1>&2
    ip=$(timeout $timeout $curl_or_wget "$url")
    if [ -n "$ip" ]; then
        echo $ip
        exit
    fi
done

Uso da amostra (chamei o script myip ):

$ myip
Trying: dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"

$ ip=$(myip); echo "IP = '$ip'"
Trying: dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'

Comente a variável verbose na parte superior do script para evitar a impressão do servidor usado.

Atualização: este script agora também está no Github, onde eu poderia atualizá-lo quando necessário: link

    
por 14.02.2017 / 20:02
3

Se você quiser usar o HTTPS para evitar algumas possíveis armadilhas:

_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"
    
por 06.11.2011 / 13:27
3

Aqui está outra alternativa que depende de quem resolve os negócios em torno do gerenciamento do IP dinâmico, e não dos sites de "serviço público" que podem desaparecer ou alterar o formato.

  1. Registre seu servidor em um dos muitos serviços de DNS dinâmicos gratuitos (por exemplo, no-ip.com). Isso lhe dará uma entrada de DNS como xxx.no-ip.org.
  2. Instale a ferramenta de atualização dinâmica do serviço (relata mudanças de IP para serviço).

Para obter o endereço IP em um script, faça o seguinte:

external_ip='dig +short xxx.no-ip.org'

Ótimo para uso no cron job para verificar se o IP dinâmico foi alterado e algumas entradas de configuração precisam ser alteradas.

    
por 20.03.2013 / 19:24
3

Isso sempre funciona para mim, eu uso no meu conky para obter meu endereço IP.

wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
    
por 04.07.2013 / 21:42
3

Desde que eu não confie na conexão ou no serviço, eu uso o seguinte código, que tenta obter o IP usando serviços diferentes (fique à vontade para adicionar mais):

# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)

while [ -z "$IP" ] # If no IP found yet, keep trying!
do
    sleep 30
    IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$((  RANDOM % ${#arr[@]}  ))]})  
done

echo -n "$IP" >  /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP" 

Para adicionar mais robustez (por exemplo, se um dos serviços mudar de formato), você pode verificar se $IP é um IP válido usando o seguinte função :

# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ 'echo $1 | grep -o '\.' | wc -l' -ne 3 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 3 dots).";
        exit 1;
elif [ 'echo $1 | tr '.' ' ' | wc -w' -ne 4 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 4 octets).";
        exit 1;
else
        for OCTET in 'echo $1 | tr '.' ' ''; do
                if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' is not numeric).";
                        exit 1;
                elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
                        exit 1;
                fi
        done
fi

return 0;
}
    
por 29.07.2014 / 03:04
3

ifcfg.me suporta:

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

IPv4 e IPv6, ainda mais coisas com o curl: ifcfg.me/?

    
por 17.12.2014 / 15:06
2

Eu gerencio um serviço de nuvem para minha família e fiz este script rápido que eu executo em cron todas as manhãs às 5 porque eu sou barato e não compro um IP estático.

Ele captura o IP público e envia por e-mail para meus usuários. Fiz o e-mail em formato de hiperlink para que minha mãe não precise digitar as portas nem nada. Talvez alguém possa usá-lo para.

#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);

echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s   "From your friendly cloud service provider" [email protected], [email protected]
    
por 22.10.2014 / 09:30
1

Isso mostrará o endereço IP atual em uma janela pop-up:

zenity --info --text "$(curl -s icanhazip.com)"
    
por 10.01.2015 / 19:54
1

Eu configurei um serviço que retorna o endereço IP como JSON / XML ou texto simples. Você pode encontrá-los aqui

link

O mesmo URL com / json e / xml também lhe dará outros formatos

Se você quiser HTTPS, poderá usar as mesmas URLs com o prefixo https. A vantagem é que, mesmo se você estiver em um Wi-Fi, você receberá o endereço público.

Portanto, um simples alias myip="curl link " irá obter o seu IP

    
por 06.01.2015 / 15:21
1

Alternativamente, você pode usar STUN que foi inventado para responder a isso pergunta de forma automatizada e é amplamente utilizado em comunicações pela Internet, por exemplo por SIP e WebRTC .

Usando um stunclient (no debian / ubuntu do apt-get install stuntman-client ) simplesmente faça:

$ stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

em que A.B.C.D é o endereço IP da sua máquina na rede local e W.X.Y.Z são os servidores de endereço IP, como os sites, vistos de fora (e aquele que você está procurando). Usando sed você pode reduzir a saída acima para apenas um endereço IP:

stunclient stun.services.mozilla.com |
    sed -ne "s/^Mapped address: \(.*\):.*$//p"

Para uma pesquisa STUN alternativa usando apenas ferramentas de linha de comando básicas, consulte minha resposta no AskUbuntu (planejado como um exercício divertido, não para uso em produção) .

    
por 11.10.2015 / 16:33
0

O w3m Plaintext-Browser é ótimo para o bash. Você pode usar grep e tail para encurtar a resposta da seguinte forma:

w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1
    
por 03.12.2014 / 14:44
0

Use o curl para acertar o serviço ip do shtuff.it

curl -s https://shtuff.it/myip/short
    
por 02.07.2013 / 16:23
0

Usando uma solicitação de DNS, mesmo atrás de um roteador NAT que traduza endereços DNS, isso pode funcionar:

$ dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t

ou, você pode usar o método de solicitação HTTP:

$ curl -s ipinfo.io/ip
x.y.z.t
    
por 17.04.2018 / 15:31