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: link
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 encontrá-lo usando o comando unix)
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: link
Você pode solicitar myip.opendns.com . do OpenDNS. dig @208.67.222.220 myip.opendns.com
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 acima só funciona para o IPv4 atualmente (nenhum desses resolvedores parece ter o IPv6 atualmente, mas se você omitir -4 e o explícito -t a , você corre o risco de quebrar no futuro (com o exceção do txt do Google, que pode realmente funcionar para o IPv6 um dia, se habilitado corretamente pelo Google).
Observe que myip.opendns.com só pode ser resolvido através de resolver1.opendns.com , e não com auth1.opendns.com - portanto, eles parecem estar fazendo alguns sequestros de DNS e man-in-the-middle de seu próprio nome de domínio! Assim, você não pode usá-lo para encontrar o IP de um resolvedor aleatório, pois resolver1.opendns.com não é autoritativo para myip.opendns.com .
Observe que o-o.myaddr.l.google.com parece a abordagem mais flexível e preparada para o futuro; é até bom para testar se o seu resolvedor de DNS suporta a extensão experimental EDNS0 para a sub-rede do cliente (que muito poucos resolvedores têm o suporte para):
% 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
Uma resposta muito simples se você tiver acesso à Internet é:
curl icanhazip.com
Tenha em mente que confiar em fontes de terceiros para o seu IP pode ser problemático, especialmente se o que você está fazendo com esses dados tiver um significado especial.
Uma maneira mais confiável é escolher um servidor DNS conhecido e confiável (idealmente executando DNSSEC) e consultar o nome do host da caixa com ele, fornecendo ao servidor DNS essas entradas;
dig @trustworthysource.com +short 'hostname'
Eu escrevi um webservice simples e rápido para isso.
curl ident.me
Você pode pedir seu IPv4:
curl v4.ident.me
Ou IPv6:
curl v6.ident.me
E a API está documentada no link
Uma maneira: link
Se
então você pode simplesmente analisar a saída de 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 link ) é o seu endereço IP público.
A mesma lista também pode ser obtida por meio de
ip addr show
que pode ser mais fácil de analisar.
Se você não tiver uma conexão direta com a Internet (NAT, etc.), não será possível encontrar seu endereço IP público sem ajuda externa (já que seu computador não o conhece). Então você terá que fazer como nas outras respostas.
Adotei uma abordagem 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 que 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 isso faz é: stun entra em contato com o servidor STUN público "stunserver.org" e recebe uma resposta com seu IP público, o resto do comando é apenas para filtrar o IP da saída.
Uma maneira é, você pode fazer uma solicitação para a página em
retorna o endereço IP do seu sistema
O Google agora exibe seu endereço IP público: link
Ok ... Eu sei que isso é bem depois do fato e provavelmente nem vale a pena postar, mas aqui está 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.
A maneira mais simples é usar o link , conforme sugerido.
Nesta página, você saberá qual comando usar para quais informações deseja recuperar.
Para IP:
curl ifconfig.meou
curl ifconfig.me/ip
Para nome de host público:
curl ifconfig.me/host
Para todas as informações em um arquivo XML:
curl ifconfig.me/all.xml
etc ... basta verificar o link
Estou fazendo muito isso e, a partir de muitos dispositivos, criei meus próprios serviços em um servidor:
arquivo php na raiz de um servidor:
user@host:~$ cat index.php'
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Uso em um shell:
$ curl -4 mydomain.com
79.22.192.12
também trabalhando com o 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
quick hack com um servidor 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 maneira com um roteador:
router#telnet myserver.com
79.22.192.12
Desta forma, você pode fazê-lo funcionar na sua rede interna, se algum nat ou proxy estiver envolvido na comunicação e você quiser saber de qual IP você aparece.
Não requer nenhum serviço de terceiros.
Para evitar depender de fontes externas, eu uso esperar, fazer telnet no meu roteador e obter o endereço IP da sua interface pública. Veja um exemplo de script:
#!/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
Eu então executo o script acima assim para obter o ip público:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
Claro, isso é baseado na suposição de que eu tenho acesso administrativo ao roteador, e é um roteador baseado no Linux, com o comando ifconfig disponível.
Duplicata de muitas outras perguntas (daí meu -1 voto).
Uma solução simples de script de shell pode ser encontrada aqui:
Funciona no Linux, FreeBSD, SunOS e Apple Darwin (com uma pequena modificação).
Se o que você deseja é encontrar o endereço IP externo em seu roteador, peça ao próprio roteador seu endereço de wan ou peça a alguém de fora para obtê-lo para você.
Para uma maneira manual, você pode navegar em qualquer um dos sites acima, que retornará o ip do pedido de confirmação.
Para uma forma automatizada, você pode tentar:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
que te dará a linha que contém o endereço IP na resposta http, então analise 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 dá o IP sem qualquer envolvimento de terceiros ..
ip addr show | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | corte -f1 -d "/"
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
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 (reporta 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.
No OS X, existem duas soluções simples para obter o IP privado e público (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"