Como posso obter meu endereço IP público na linha de comando, se eu estiver atrás de um roteador?

36

Existe uma maneira de obter meu endereço IP público (WAN) na linha de comando? Estou atrás de um roteador (rede LAN), com um endereço IP dinâmico atribuído pelo meu provedor.

Eu vi soluções usando um serviço da Web externo (como ifconfig.me ), mas quero saber se posso fazer isso sem um serviço externo.

    
por user61954 22.12.2012 / 07:11

9 respostas

25

Supondo que seu sistema tenha 2 dispositivos ethernet, eth0 e eth1 e eth0 estão conectados à sua LAN, digamos IPs 192.168.1.X e seu eth1 dispositivo está conectado ao seu ISP (WAN) vai querer usar o seguinte comando ifconfig para obter o seu IP para o lado da WAN.

OBSERVAÇÃO: As 2as 2 maneiras assumem que você as está executando em um computador que possui 2 dispositivos ethernet e que um deles está conectado ao seu ISP (modem a cabo e / ou modem DSL) . Neste cenário, o dispositivo ethernet (eth1) será configurado com o seu endereço IP na internet (WAN IP).

1ª maneira

                          +------------------------+
  +--------+    WAN IP    |   Computer that wants  |  LAN IP
  |Internet|--------------|     to know WAN IP     |------------
  +--------+  54.234.1.33 | +------+      +------+ | 192.168.1.1
                          +-| eth1 |------| eth0 |-+
                            +------+      +------+

% ifconfig eth1 | awk '/inet / { print $2 }' | sed -e s/addr://
54.234.1.33

Você também pode usar o comando ip .

% ip addr show eth1 | awk '/inet/ {print $2}' | sed 's#/.*##'
54.234.1.33

2ª maneira

Se você precisar descobrir isso em um sistema que fica apenas na LAN, você pode configurar uma chave ssh sem senha e adicioná-la a uma conta em sua máquina LAN para que possa acessar remotamente o sistema com o acesso à WAN. assim.

                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|remote-server|-----------------| wants to know  |
  +--------+  54.234.1.33  +----+-----+----+  192.168.1.x  +----+ WAN IP     |
                           |eth1|     |eth0|               |eth0|------------+
                           +----+     +----+               +----+

% ssh ruser1@remote-server "ifconfig eth1 | awk '/inet / { print \ }' | sed -e s/addr://"
54.234.1.33

3ª via

Se você não conseguir usar ssh na caixa que tem acesso à WAN e estiver usando um roteador / switch doméstico, como uma caixa Linksys ou Netgear. Você pode obter o IP desse dispositivo por meio de uma página de status HTTP. Eu fiz isso no passado também, algo semelhante ao que é descrito neste post do fórum whatismyip.com .

                                                               192.168.1.2
                                                            +----------------+
  +--------+    WAN IP      +-------------+      LAN IP     | Computer that  |
  |Internet|----------------|router/switch|-----------------| wants to know  |
  +--------+  54.234.1.33   +-------------+   192.168.1.x  +----+ WAN IP     |
                              192.168.1.1                  |eth0|------------+
                                                           +----+

# something like this....

% wget -q -O - http://<username>:<password>@192.168.1.1/Status_Router.asp | grep "ipaddress" | cut -d" " -f2

OBSERVAÇÃO: Essa abordagem é altamente dependente de qual roteador / switch você possui, seja uma marca da Linksys, Netgear, etc. Cada um terá sua própria página exclusiva com o IP da WAN.

4º caminho

Enviando uma consulta contra um site externo que relatará seu endereço IP da WAN.

OBSERVAÇÃO: Estou ciente de que a pergunta original mencionou que eles estavam procurando alternativas para essa abordagem, mas estou colocando aqui para que essa resposta cubra todas as bases.

                                                        +---------------+
  +-------------+   +--------+   +------+     LAN IP    | Computer that |
  |whatsmyip.com|---|Internet|---|router|---------------| wants to know |
  +-------------+   +--------+   +------+  192.168.1.x +----+ WAN IP    |
you're 54.234.1.33                                     |eth0|-----------+
                                                       +----+

# 1st server
% wget -qO - ipv4bot.whatismyipaddress.com
54.234.1.33

# 2nd server
% curl 'https://api.ipify.org?format=json'

{"ip":"54.234.1.33"}
% curl 'https://api.ipify.org?format=txt'
54.234.1.33

# 3rd server
% curl -s checkip.dyndns.org | sed 's#.*Address: \(.*\)</b.*##'
54.234.1.33

Informações adicionais estão disponíveis aqui: COMO: Verificar endereço IP externo na linha de comando

    
por 22.12.2012 / 08:52
11

Se o seu sistema tiver o curl instalado (a maioria usa), você pode usar

curl ifconfig.me
    
por 28.12.2012 / 22:00
8

Quando você está atrás de um roteador NAT com UPNP, você pode usar o miniupnpc para detectar o endereço IP:

# debian/ubuntu setup: 
# sudo apt-get install miniupnpc

# get WAN IP address from UPNP router:
upnpc -s | grep ^ExternalIPAddress | cut -c21-

Você poderia usá-lo em um script, por exemplo para cron como:

#!/bin/bash
#
# In this example, lynx is used as http client. you could also use something else
# like wget etc.
# debian/ubuntu lynx setup: 
#
# apt-get install lynx
#

EXTIP='upnpc -s | grep ^ExternalIPAddress | cut -c21-'
DDNSURL="http://your-ddns-service.com/update/my/ip/to/$EXTIP"
TFILE=/tmp/.WAN_IP
if [ -f $TFILE ]; then
        OXTIP='head -1 $TFILE'
else
        touch $TFILE
        OXTIP="NULL"
fi
if [ "$EXTIP" != "$OXTIP" ]; then
        mv $TFILE "$TFILE~"
        echo "$EXTIP" > $TFILE
        lynx -source $DDNSURL > /dev/null
        echo "================================"
        date
        echo "WAN_IP = $EXTIP"
fi
    
por 27.08.2013 / 09:12
4

Buscar informações do seu roteador via ssh ou curl.

Eu uso o curl para perguntar ao dyndns pelo meu ip público, mas esse comando não parece aplicável para você, certo?

curl http://checkip.dyndns.org 2> /dev/null| perl -pe 's,.*Address: (\d+\.\d+\.\d+\.\d+).*,$1,'

    
por 22.12.2012 / 11:22
4

Provavelmente, o roteador deve fornecer uma maneira de obter o IP externo se nenhum serviço externo puder ou puder ser usado (como algumas outras respostas já indicaram). Para serviços externos, na maioria das outras respostas, um serviço da web é usado. Esta resposta no Unix SE sugere o uso do DNS.

Por exemplo, usando dig com OpenDNS como resolvedor:

dig +short myip.opendns.com @resolver1.opendns.com
    
por 29.12.2014 / 03:20
2

Infelizmente, não há como detectar mecanismos como o NAT que não envolvam o contato com um serviço remoto. O NAT é por natureza completamente transparente para o usuário, além de serviços quebrados, e não há um protocolo padrão para a descoberta de NAT.

Mas, no que diz respeito aos serviços externos, tenho de sugerir o rápido e simples que eu escrevi, ident.me, que você pode usar tanto para o IPv4 quanto para o IPv6; Por sua forma mais simples, você pode usar curl ident.me e a API completa está documentada no link

    
por 03.01.2013 / 23:40
1

Se o seu roteador suportar NAT PMP (Protocolo de mapeamento de portas), você poderá recuperar seu IP público usando o natpmp .

Existe uma interface de linha de comando para a biblioteca natpmp do linux chamada natpmpc. No Ubuntu, está no pacote natpmp-utils . Meu roteador não parece suportar natpmp, então não tenho certeza se o utilitário natpmpc retornará seu IP público.

    
por 04.01.2013 / 02:31
0

O comando linux que você está procurando é ifconfig supondo que você esteja conectado diretamente à internet.

Se não e acessando através de proxies ou roteamento especial, a maneira mais fácil (como os outros indicam) é acessar / acessar outro host e verificá-lo de lá.

Além disso, você gostaria de discutir essa questão com seu administrador de sistemas de vizinhança amigável.

    
por 22.12.2012 / 07:55
-1
curl checkip.dyndns.org

sed que se você precisar

    
por 19.01.2013 / 17:56