Comando para determinar meu IP público?

499

Se eu verificar com google , posso ver meu IP público. Existe algo na linha de comando do Ubuntu que me dará a mesma resposta?

    
por kfmfe04 16.01.2012 / 12:50

22 respostas

691

Se você não estiver atrás de um roteador, poderá encontrá-lo usando ifconfig .

Se você estiver atrás de um roteador, o computador não saberá sobre o endereço IP público, pois o roteador faz uma conversão de endereço de rede. Você poderia perguntar a um website qual é o seu endereço IP público usando curl ou wget e extrair as informações necessárias:

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

ou menor

curl ipinfo.io/ip
    
por Michael K 16.01.2012 / 12:56
355

Para encontrar o ip externo, você pode usar serviços externos baseados na web ou usar métodos baseados no sistema. O mais fácil é usar o serviço externo, e as soluções baseadas em ifconfig só funcionarão no seu sistema se você não estiver atrás de um NAT . os dois métodos foram discutidos abaixo em detalhes.

Encontrar o IP externo usando serviços externos

A maneira mais fácil é usar um serviço externo por meio de um navegador de linha de comando ou ferramenta de download. Como wget está disponível por padrão no Ubuntu, podemos usar isso.
Para encontrar seu ip, use-

$ wget -qO- http://ipecho.net/plain ; echo

Cortesia :

Você também pode usar lynx (navegador) ou curl no lugar de wget com pequenas variações no comando acima, para encontrar seu ip externo.

Usando curl para encontrar o ip:

$ curl ipecho.net/plain

Para um melhor uso de saída formatada:

$ curl ipecho.net/plain ; echo

Um método mais rápido (possivelmente o mais rápido) usando dig com OpenDNS como resolvedor:

  

As outras respostas aqui passam por HTTP para um servidor remoto. Alguns   eles exigem análise da saída ou dependem do cabeçalho User-Agent   para fazer o servidor responder em texto simples. Eles também mudam bastante   freqüentemente (vá abaixo, mude o nome deles / delas, ponha anúncios, pode mudar   formato de saída, etc.).

     
  1. O protocolo de resposta do DNS é padronizado (o formato permanecerá compatível).
  2.   
  3. Historicamente, os serviços DNS (OpenDNS, Google Public DNS, ..) tendem a sobreviver por muito mais tempo e são mais estáveis, escalonáveis e geralmente parecidos   depois do que qualquer novo serviço de hip whatismyip.com HTTP está quente hoje.
  4.   
  5. (para os geeks que se preocupam com a micro-otimização), esse método deve ser inerentemente mais rápido (seja apenas alguns microssegundos).
  6.   

Usando dig com OpenDNS como resolvedor:

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

111.222.333.444

Copiado de: link

Como encontrar um IP externo sem depender de serviços externos

  • Se você souber o nome da sua interface de rede

Digite o seguinte no seu terminal:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print }' | awk '{print }'

Acima, substitua <interface_name> pelo nome da sua interface real, por exemplo: eth0 , eth1 , pp0 , etc ...

Exemplo de uso:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print }' | awk '{print }'
111.222.333.444
  • Se você não souber o nome da sua interface de rede

Digite o seguinte no seu terminal (isso obtém o nome e endereço IP de cada interface de rede em seu sistema):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'

Exemplo de uso:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if (  == "inet" ) { print  } else if (  == "Link" ) { printf "%s:" , } }' |awk -F: '{ print  ": "  }'
lo: 127.0.0.1
ppp0: 111.222.333.444

N.B: As saídas são indicativas e não reais.

Cortesia: link

UPDATE

  1. LANG=c foi adicionado aos usos com base em ifconfig , para que sempre forneça a saída em inglês, independentemente da configuração de localidade.
por saji89 01.06.2012 / 14:10
99

Meu favorito sempre foi:

curl ifconfig.me

simples, fácil de digitar.

Você terá que instalar o curl primeiro;)

Se o ifconfig.me estiver desativado, tente icanhazip.com e / ou ipecho.net

curl icanhazip.com

ou

curl ipecho.net
    
por Panther 01.06.2012 / 14:41
53

icanhazip.com é o meu favorito.

curl icanhazip.com

Você pode solicitar o IPv4 explicitamente:

curl ipv4.icanhazip.com

Se você não tiver curl , poderá usar wget :

wget -qO- icanhazip.com
    
por yprez 01.06.2012 / 19:23
43

Eu encontrei tudo para ser chato e lento, então eu escrevi o meu próprio. É simples e rápido.

Sua API está no link

Exemplos:

curl ident.me
curl v4.ident.me
curl v6.ident.me
    
por Pierre Carrier 03.01.2013 / 16:49
36

Você pode usar uma solicitação de DNS em vez de uma solicitação HTTP para descobrir seu IP público:

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

Ele usa o servidor resolver1.opendns.com dns para resolver o nome do host mágico myip.opendns.com para seu endereço IP

.     
por jfs 27.02.2014 / 16:07
17

O que eu estou usando é:

wget -O - -q icanhazip.com

Sim, você pode ter ip: -)

    
por jflaflamme 16.01.2012 / 15:20
15

Amazon AWS

curl http://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
11

Digite exatamente isso, pressione Enter onde indicado:

telnet ipecho.net 80 Introduzir
GET /plain HTTP/1.1 Introduzir
HOST: ipecho.net Introduzir
BROWSER: web-kit Digite
Digite

Isso envia manualmente uma solicitação HTTP, que retornará seu IP na parte inferior de um HTTP/1.1 200 OK reply

Exemplo de saída:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0
    
por Liam 02.07.2013 / 08:38
8

Outro rápido (pode muito bem ser o mais rápido, relativamente)

curl ipecho.net/plain
    
por Mohnish 31.12.2013 / 21:49
7

Para isso, STUN foi inventado. Como cliente, você pode enviar uma solicitação para um servidor STUN publicamente disponível e fazer com que ele devolva o endereço IP que ele vê. Classifique o nível baixo de whatismyip.com, já que ele não usa HTTP e nem servidores DNS inteligentemente criados, mas o incrivelmente rápido protocolo STUN.

Usando stunclient

Se você tem stunclient instalado ( apt-get install stuntman-client no debian / ubuntu) você pode simplesmente fazer:

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

onde 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 -n -e "s/^Mapped address: \(.*\):.*$//p"

No entanto, sua pergunta foi como encontrá-lo usando a linha de comando, o que pode excluir o uso de um cliente STUN. Então eu me pergunto ...

Usando bash

Uma solicitação de STUN pode ser feita manualmente, enviada para um servidor STUN externo usando netcat e pós-processada usando dd , hexdump e sed da seguinte forma:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |
    nc -u -w 2 stun.services.mozilla.com 3478 |
    dd bs=1 count=4 skip=28 2>/dev/null |
    hexdump -e '1/1 "%u."' |
    sed 's/\.$/\n/'

O echo define uma solicitação STUN binária (0x0001 indica Solicitação de ligação) com comprimento 8 (0x0008) com o cookie 0xc00cee e alguns itens colados do wireshark. Apenas os quatro bytes que representam o IP externo são retirados da resposta, limpos e impressos.

Trabalhando, mas não recomendado para uso em produção: -)

P.S. Muitos servidores STUN estão disponíveis, pois é uma tecnologia básica para SIP e WebRTC. Usar um do Mozilla deve ser seguro em termos de privacidade, mas você também pode usar outro: Lista de servidores STUN

    
por Victor Klos 09.10.2015 / 19:21
6

Eu tenho um serviço estúpido para isso por telnet. Algo parecido com isto:

telnet myip.gelma.net

Your IPv4: xxx.xxx.xxx.xxx
Your IPv6: ::ffff:xxxx:xxxx

Sinta-se à vontade para usá-lo.

    
por Gelma 13.03.2014 / 13:37
4

Você pode ler uma página da Web usando apenas o bash, sem curl , wget :

$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
  echo 'GET /' >&3 &&                   # send http 0.9 request
  read -u 3 && echo $REPLY &&           # read response
  exec 3>&-                             # close fd
    
por jfs 18.09.2014 / 12:47
2

Use cURL com ipogre.com (IPv4 e IPv6 são suportados).

IPv4

curl ipv4.ipogre.com

IPv6

curl ipv6.ipogre.com

link

    
por Jacob 31.12.2013 / 06:07
2

Para aqueles de nós com acesso de login aos nossos roteadores, usar um script para perguntar ao roteador qual é o endereço IP da WAN é a maneira mais eficiente de determinar o endereço IP externo. Por exemplo, o seguinte script python imprime o IP externo do meu roteador Medialink MWN-WAPR300N:

import urllib, urllib2, cookielib
import re
from subprocess import check_output as co

cookie_jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
urllib2.install_opener(opener)

def get(url, values=None):
  data = None
  if values: data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  rsp = urllib2.urlopen(req)
  return rsp.read()

router = co(['ip', '-o', 'ro', 'list', '0.0.0.0/0']).split()[2]
url = "http://" + router

get(url+"/index.asp")
get(url+"/LoginCheck", dict(checkEn='0', Username='admin', Password='admin'))
page = get(url+"/system_status.asp")

for line in page.split("\n"):
  if line.startswith("wanIP = "):
    print line.split('"')[1]
    exit(1)

Observe que isso não é muito seguro (como é o caso das credenciais de texto simples e login na maioria dos roteadores) e certamente não é portátil (precisa ser alterado para cada roteador). No entanto, é muito rápido e uma solução perfeitamente razoável em uma rede doméstica fisicamente segura.

Para personalizar o script para outro roteador, recomendo usar o addon tamperdata no firefox para determinar quais solicitações HTTP devem ser feitas.

    
por KarlC 27.03.2014 / 04:08
2

Estes irão obter os IPs locais:

ifconfig

ou para resultados mais curtos:

ifconfig | grep inet

também

ip addr show

e provavelmente:

hostname -I

Isso deve obter o IP externo

wget http://smart-ip.net/myip -O - -q ; echo

N.B. Se você não se importar em instalar curl , também:

curl http://smart-ip.net/myip
    
por Wilf 27.06.2014 / 18:08
1

Se você instalou lynx no tipo Ubuntu

lynx bot.whatismyipaddress.com
    
por Binny 09.01.2013 / 13:35
1

Muitos roteadores domésticos podem ser consultados pelo UPnP:

curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:schemas-upnp-org:service:WANIPConnection:1' /> </s:Body> </s:Envelope>" -s

Em seguida, escolha o endereço IP da resposta.

grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'
    
por jms 18.09.2016 / 22:45
0

Se você estiver usando DD-WRT , isso funciona para mim:

curl -s 192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'

ou

curl -s -u your_ddwrt_username:your_ddwrt_password http://192.168.1.1 | grep "ipinfo" | awk -v FS="(IP: |</span)" '{print }'
  • Onde 192.168.1.1 é o endereço IP da LAN do gateway / roteador do roteador DD-WRT.

  • O componente -s significa silêncio (ou seja, não mostra as informações de progresso de curl).

  • Ah, devo mencionar que eu uso o acima com "DD-WRT v24-sp2 (01/04/15) std" .
por CMP 14.04.2017 / 18:14
-1

Um comando sem dependências, exceto 8.8.8.8 sendo um DNS do Google:

echo $(ip route get 8.8.8.8 | awk '{print $NF; exit}')
    
por Rolf 19.08.2015 / 09:57
-1

use ip !

ip addr show

procure o adaptador relevante (não lo e geralmente eth0 ) e localize o endereço IP próximo a inet .

    
por Eliran Malka 16.08.2016 / 01:06
-2

Basta criar um traceroute para qualquer site ou serviço.

sudo traceroute -I google.com

A linha 2 sempre parece ser o meu endereço IP público depois de passar pelo gateway do roteador.

[email protected] ~ $ sudo traceroute -I google.com
traceroute to google.com (173.194.46.104), 30 hops max, 60 byte packets
 1  25.0.8.1 (25.0.8.1)  230.739 ms  231.416 ms  237.819 ms
 2  199.21.149.1 (199.21.149.1)  249.136 ms  250.754 ms  253.994 ms**

Então, faça um comando bash.

sudo traceroute -I google.com | awk -F '[ ]' '{ if (  ="2" ) { print  } }'

E a saída ...

(199.21.149.1)

Eu não acho que depender de scripts PHP e do tipo é uma boa prática.

    
por woahguy 24.07.2015 / 18:34

Tags