Eu posso encontrar meu endereço IP usando o comando ifconfig ou hostname -i.
Mas como encontro meu IP público?
(Eu tenho um IP público estático, mas quero descobrir usando o comando unix)
Eu posso encontrar meu endereço IP usando o comando ifconfig ou hostname -i.
Mas como encontro meu IP público?
(Eu tenho um IP público estático, mas quero descobrir usando o comando unix)
Respostas:
curl ifconfig.me
curl ifconfig.me/ip
(apenas para o ip)
curl ifconfig.me/all
(para mais informações, leva tempo)
Para mais comandos, visite: http://ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
Você pode solicitar myip.opendns.com
. do OpenDNS. dig @208.67.222.220 myip.opendns.com
dig @resolver1.opendns.com myip.opendns.com
. Ou no Windows: nslookup myip.opendns.com resolver1.opendns.com
.
dig @208.67.222.220 myip.opendns.com +short
para obter diretamente o ip sem ter que passar por toda a resposta.
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Observe que o descrito acima funciona apenas para o IPv4 atualmente (nenhum desses resolvedores parece ter o IPv6 atualmente, mas se você omitir -4
e o explícito -t a
, corre o risco de quebrar no futuro (com exceção do Google txt
, que pode realmente funcionar para IPv6 um dia, se ativado corretamente pelo Google)).
Note que isso myip.opendns.com
só pode ser resolvido resolver1.opendns.com
, e não com auth1.opendns.com
- então, eles parecem estar realizando algum seqüestro de DNS e o homem do meio de seu próprio nome de domínio! Portanto, você não pode usá-lo para encontrar o IP de um resolvedor aleatório, pois ele resolver1.opendns.com
não é autorizado myip.opendns.com
.
Observe que o-o.myaddr.l.google.com
parece a abordagem mais flexível e à prova de futuro; é até bom testar se o resolvedor DNS suporta a extensão experimental EDNS0 para sub-rede do cliente (para a qual poucos resolvedores têm suporte):
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.
-4
ou -6
se precisa de uma versão IP específica.
Uma resposta muito simples se você tiver acesso à Internet é:
curl icanhazip.com
Lembre-se de que confiar em fontes de terceiros para seu IP pode ser problemático, especialmente se o que você faz com esses dados tiver um significado especial.
Uma maneira mais confiável é escolher um servidor DNS conhecido e confiável (idealmente executando o DNSSEC) e consultar o nome do host da caixa com ele, desde que o servidor DNS contenha essas entradas;
dig @trustworthysource.com +short `hostname`
Eu escrevi um serviço web simples e rápido para isso.
curl ident.me
Você pode solicitar seu IPv4:
curl v4.ident.me
Ou IPv6:
curl v6.ident.me
E a API está documentada em http://api.ident.me/
Uma maneira: http://www.whatismyip.com/
E se
então você pode simplesmente analisar a saída do ifconfig para os endereços IP das interfaces (a parte "inet addr:") para obter a lista de endereços IP de todas as suas interfaces. O único endereço IP que não está no intervalo privado (consulte http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ) é o seu endereço IP público.
A mesma lista também pode ser obtida através de
ip addr show
o que pode ser mais fácil de analisar.
Se você não possui uma conexão direta à Internet (NAT, etc.), não há como encontrar seu endereço IP público sem ajuda externa (já que o computador não o conhece). Então você terá que fazê-lo como nas outras respostas.
Adotei uma abordagem um pouco diferente usando o protocolo STUN, projetado para o NAT Traversal. Se você usa o Ubuntu, basta instalar o pacote "stun" digitando:
sudo apt-get install stun
O pacote instala um servidor STUN do qual você provavelmente não precisará, mas também vem com um cliente de teste STUN que eu usei para resolver esse problema. Agora você pode recuperar seu IP público com um comando (não tão simples):
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
Agora, o que ele faz é: stun entra em contato com o servidor público STUN "stunserver.org" e recebe uma resposta com seu IP público, o restante do comando é apenas para filtrar o IP da saída.
Uma maneira é fazer uma solicitação para a página em
http://www.biranchi.com/ip.php
retorna o endereço IP do seu sistema
text/html
é bom para o que a pseudo-API retorna - certamente não é XML ou JSON. text/plain
talvez, mas é totalmente utilizável como text/html
.
wget -q -O - http://wgetip.com/
O Google agora exibe seu endereço IP público: http://www.google.com/search?q=ip
User-Agent
sequência é fornecida à página. Com o Firefox, ele funciona; mas o SeaMonkey com a string "Firefox" desativada (por meio de "general.useragent.compatMode.firefox" definido como false), de repente não acontece. Não tenho absolutamente nenhuma idéia de por que o Google permite explicitamente coisas como essa apenas para o Firefox, em vez de apenas qualquer Gecko, já que existem muitos outros navegadores de desktop baseados no Gecko que são igualmente compatíveis, incluindo o SeaMonkey.
Ok ... Eu sei que isso é MUITO MANUAL após o fato e provavelmente nem vale a pena postar, mas aqui está a minha solução de trabalho.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Agradável e simples.
hostname -I
(capital 'i').
A maneira mais simples é usar http://ifconfig.me/ , conforme sugerido.
Nesta página, você saberá qual comando usar para quais informações deseja recuperar.
Para IP:
enrolar ifconfig.meou
enrolar ifconfig.me/ip
Para nome de host público:
enrolar ifconfig.me/host
Para todas as informações em um arquivo XML:
enrolar ifconfig.me/all.xml
etc ... basta verificar http://ifconfig.me
Estou fazendo muito isso e em vários dispositivos, então fiz meus próprios dois serviços em um servidor:
arquivo php na raiz de um servidor web:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Uso em uma concha:
$ curl -4 mydomain.com
79.22.192.12
também trabalhando com ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Com o netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Em um roteador Cisco:
router#more http://myserver.com/index.php
79.22.192.12
hack rápido com um servidor de telnet personalizado: xinetd spawning / usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
e depois telnet para ele:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
funciona da mesma forma com um roteador:
router#telnet myserver.com
79.22.192.12
Dessa forma, você pode fazer com que ele funcione na sua rede interna, se algum nat ou proxy estiver envolvido na comunicação e você quiser saber a partir de qual IP você aparece.
Não requer nenhum serviço de terceiros.
Para evitar depender de fontes externas, uso o expect, para telnetar no meu roteador e obter o endereço IP de sua interface pública. Aqui está um exemplo de script esperado:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
Em seguida, executo o script acima dessa maneira para obter o ip público:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Obviamente, isso se baseia na suposição de que eu tenho acesso de administrador ao roteador e é um roteador baseado em linux, com o comando ifconfig disponível.
Duplicado de muitas outras perguntas (daí o meu voto de -1).
Uma solução simples de script de shell pode ser encontrada aqui:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Funciona em Linux, FreeBSD, SunOS e Apple Darwin (com uma pequena modificação).
Se o que você deseja é encontrar o endereço IP externo no seu roteador, solicite ao próprio roteador o endereço de wan ou peça a alguém de fora para buscá-lo.
de maneira manual, você pode navegar em qualquer um dos sites acima mencionados que retornarão o ip da solicitação recebida.
De uma maneira automatizada, você pode tentar:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
que lhe dará a linha que contém o endereço IP na resposta http e, em seguida, analisa-o com sed, awk, etc.
você pode usar apenas o shell para verificar seu ip externo, também usando provedores externos
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
saída
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -m1
Eu faço isso. Apenas me fornece o IP sem nenhum envolvimento de terceiros.
show de endereço IP | grep eth0 | grep inet | tr-s "" | corte -f3 -d "" | corte -f1 -d "/"
Aqui está outra alternativa que depende dos hosts cuja empresa resolve gerenciar o IP dinâmico em vez dos sites de "serviço público" que podem desaparecer ou alterar o formato.
1) Registre seu servidor em um dos muitos serviços dinâmicos de DNS gratuitos (por exemplo, no-ip.com) Isso fornecerá uma entrada DNS como xxx.no-ip.org.
2) Instale a ferramenta de atualização dinâmica do serviço (relata alterações de IP no serviço).
Para obter o endereço IP em um script, basta:
$external_ip = `dig +short xxx.no-ip.org`
Ótimo para uso no trabalho do cron para verificar se o IP dinâmico foi alterado e algumas entradas de configuração precisam ser alteradas.
No OS X, aqui estão duas soluções simples para obter o IP público e o privado (com código de bônus se você usar o LaunchBar).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"