Se eu verificar com o, Eu posso ver meu IP público. Existe algo na linha de comando do Ubuntu que me dará a mesma resposta?
Se você não estiver atrás de um roteador, poderá descobri-lo usando ifconfig
.
Se você estiver atrás de um roteador, seu computador não saberá sobre o endereço IP público, pois o roteador faz uma tradução de endereço de rede. Você pode perguntar a algum site o que seu endereço IP público está usando curl
ou wget
e extraia as informações que você precisa dele:
curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
ou mais curto
curl https://ipinfo.io/ip
Para encontrar o ip externo, você pode usar serviços externos baseados na web ou usar métodos baseados em sistema. O mais fácil é usar o serviço externo, também o ifconfig
as soluções baseadas funcionarão em seu sistema somente se você não estiver atrás de um NAT
. os dois métodos foram discutidos abaixo em detalhes.
Encontrando 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. Desde wget
está disponível por padrão no Ubuntu, podemos usar isso.
Para encontrar seu ip, use-
$ wget -qO- https://ipecho.net/plain ; echo
Cortesia:
- https://hawknotes.blogspot.in/2010/06/finding-your-external-ip-address.html
- https://ipecho.net/plain
Você também pode usar lynx
(navegador) ou curl
no lugar de wget
com pequenas variações para o comando acima, para encontrar o seu ip externo.
Mear curl
para encontrar o ip:
$ curl https://ipecho.net/plain
Para uma melhor saída formatada use:
$ curl https://ipecho.net/plain ; echo
Um método mais rápido (sem dúvida o mais rápido) usando dig
com OpenDNS
como resolvedor:
As outras respostas aqui passam por HTTP para um servidor remoto. Alguns deles 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 com bastante frequência (desça, mude seu nome, coloque anúncios, pode alterar o formato de saída etc.).
- O protocolo de resposta DNS é padronizado (o formato permanecerá compatível).
- Serviços historicamente DNS (OpenDNS, DNS público do Google,..) tendem a sobreviver por muito mais tempo e são mais estáveis, escaláveis e geralmente cuidadas do que qualquer novo quadril whatismyip.com o serviço HTTP está quente hoje.
- (para aqueles geeks que se preocupam com a micro-otimização), este método deve ser inerentemente mais rápido (seja apenas por alguns micro segundos).
Usando dig com OpenDNS como resolvedor:
$ dig +short myip.opendns.com @resolver1.opendns.com111.222.333.444
Copiado de: https://unix.stackexchange.com/a/81699/14497
Encontrar IP externo sem depender de serviços externos
- Se você sabe o nome da sua interface de rede
Digite o seguinte em seu terminal:
$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
No acima, substitua <interface_name>
com o nome da sua interface real, por exemplo: eth0
, eth1
, pp0
, etc...
Exemplo De Uso:
$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'111.222.333.444
- Se você não souber o nome da sua interface de rede
Digite o seguinte em seu terminal (isso obtém o nome e o endereço ip de cada interface de rede em seu sistema):
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
Exemplo De Uso:
$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'lo: 127.0.0.1ppp0: 111.222.333.444
N. B: As saídas são indicativas e não reais.
Cortesia: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/
ACTUALIZACAO
-
LANG=c
foi adicionado aifconfig
usos baseados, para que sempre forneça a saída em inglês, independentemente da configuração de localidade.
Meu favorito sempre foi :
curl ifconfig.me
simples, fácil de digitar.
Você terá que instalar o curl primeiro ;)
Se ifconfig.me é para baixo tentar icanhazip.com e ou ipecho.net
curl icanhazip.com
ou
curl ipecho.net
icanhazip.com é o meu favorito.
curl icanhazip.com
Você pode solicitar IPv4 explicitamente:
curl ipv4.icanhazip.com
Se você não tem curl
você pode usar wget
Sim:
wget -qO- icanhazip.com
Achei tudo irritante e lento, então escrevi o meu próprio. É simples e rápido.
Sua API está em http://api.ident.me/
Exemplo:
curl ident.mecurl v4.ident.mecurl v6.ident.me
Projeto técnico: em DNS, ident.me tem registros A e AAAA, v4.ident.me só tem um registro, e v6.ident.me só tem um registro AAAA. As portas 443 e 80 nesses IPs são servidas pelo nginx, com SSL usando certificados fornecidos por letsencrypt.org através do certbot, e com a seguinte configuração (trecho):
server { […] server_name .ident.me; location / { default_type text/plain; return 200 $remote_addr; add_header Access-Control-Allow-Origin "*"; add_header Cache-Control "no-cache, no-store, must-revalidate"; }}
Você pode usar uma solicitação DNS em vez de uma solicitação HTTP para descobrir seu IP público:
$ dig +short myip.opendns.com @resolver1.opendns.com
Ele usa resolver1.opendns.com
servidor dns para resolver o mágico myip.opendns.com
nome do host para sua endereço ip.
Amazon AWS
curl https://checkip.amazonaws.com
Saída da amostra:
123.123.123.123
Também funciona no navegador: http://checkip.amazonaws.com
Eu gosto porque:
- ele retorna apenas o IP de texto simples no corpo da resposta, nada mais
- é de um provedor bem conhecido que é improvável que fique offline tão cedo
O que estou usando é :
wget -O - -q icanhazip.com
Sim, você pode ter ip :-)
Digite isso exatamente, pressione Enter quando indicado:
telnet ipecho.net 80
EnterGET /plain HTTP/1.1
EnterHOST: ipecho.net
EnterBROWSER: web-kit
Enter
Enter
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 80Trying 146.255.36.1...Connected to ipecho.net.Escape character is '^]'.GET /plain HTTP/1.1HOST: ipecho.netBROWSER: web-kitHTTP/1.1 200 OKDate: Tue, 02 Jul 2013 07:11:42 GMTServer: ApacheExpires: Mon, 26 Jul 1997 05:00:00 GMTCache-Control: no-cachePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/htmlf111.222.333.4440
Para isso, ATORDOAR foi inventado. Como cliente, você pode enviar uma solicitação a um servidor de atordoamento disponível publicamente e fazer com que ele devolva o endereço IP que vê. Tipo do nível baixo whatismyip.com como ele não usa HTTP e não servidores DNS inteligentemente criados, mas o protocolo de atordoamento incrivelmente rápido.
Mear stunclient
Se você tem stunclient
fornecer (apt-get install stuntman-client
no debian / ubuntu) você pode simplesmente fazer:
$stunclient stun.services.mozilla.comBinding test: successLocal address: A.B.C.D:42541Mapped 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
é os servidores de endereço IP como sites vêem de fora(e aquele que você está procurando). Mear 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: \(.*\):.*$/\1/p"
No entanto, sua pergunta era como encontrá-lo usando a linha de comando, que pode excluir o uso de um cliente STUN. Então eu me pergunto...
Mear bash
Uma solicitação de atordoamento pode ser feita à mão, enviada para um servidor de atordoamento externo usando netcat
e ser pós-processado usando dd
, hexdump
e sed
comer:
$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 de atordoamento binária (0x0001 indica solicitação de vinculação) com comprimento 8 (0x0008) com o cookie 0xc00cee e algumas coisas coladas do wireshark. Apenas os quatro bytes que representam o IP externo são retirados da resposta, limpos e impressos.
Trabalho, mas não recomendado para o uso da produção: -)
P. S. Muitos servidores STUN estão disponíveis, pois é uma tecnologia central para SIP e WebRTC. Usar um da Mozilla deve ser seguro em termos de privacidade, mas você também pode usar outro: STUN server list
“ter IP dinâmico”, “SSH usando algum outro sistema na internet”, “o comando que exibirá o IP público atual”. Você vê o problema de frango / ovo aqui? Como você seria capaz de executar comandos em um servidor remoto sem saber seu endereço? Você pode estar mais interessado em serviços como no-ip.com / DynDNS.org.
Talvez esta seja uma pergunta separada, mas gostaria de ver um alerta quando meu endereço IP público mudar. Por enquanto, estou apenas usando as seguintes respostas em um crontab com ‘notify-send’.
não se pode SSH sem conhecer o IP público meu amigo… dynDNS custa muito e não-ip trabalhos difíceis, mas a situação não permite isso… de qualquer forma, a pergunta já foi respondida… obrigado pela sua sugestão
grandes soluções abaixo. Para Centos use ` ‘ifconfig eth1 / sed-NRE’ / ^ [ ^ ] + / {n; s / ^ ([^]+).* inet * ([ ^ ]+).*/ \ 2 / p}" onde eth1 é o dispositivo de rede o interesse, você pode omitir a string ’ et1 ’ para mostrar todos os ips de todos os adaptadores. Em vez de '\ 2 ‘você pode escrever’ \1 \ 2 ’ para mostrar os nomes de cada adaptador também.
Nenhuma das respostas mostra a abordagem correta. Como Não tenho reputação suficiente para postar uma resposta, postarei um comentário sobre como obtê-la sem depender de serviços externos. Basta executar no terminal ’ $ hostname --IP-address`