Comando Shell para obter endereço IP?


Respostas:



25

Você pode usar:

/bin/ip addr

3
@opierce Você marcou a resposta do mpbloch como correta, mas como FYI, você deve usar essa resposta, pois isso faz parte do pacote iproute2. ifconfigestá sendo faseado agora.
jwbensley

3
Você pode tornar isso mais curto apenas executando ip a.
gak

19

Se você tiver um endereço interno em uso, marque

curl http://myip.dnsomatic.com

pode ser uma boa idéia para os shell do Unix.
Ou simplesmente insira esse URL no seu navegador.


Se você receber uma resposta diferente do " ifconfig -a" resultado,
o ifconfigseu endereço interno foi fornecido - o que provavelmente não funcionará de fora.


Mesmo que tudo pareça bem, você pode ter um firewall que desaprova as conexões ssh recebidas .
Nesse momento, você deve experimentar a porta de interesse de um navegador na máquina em,

http://www.canyouseeme.org/

Isso confirmará a conectividade por meio de,

  • endereço IP externo (mostrando para você nessa página)
  • NAT, Port Forward
  • Firewalls

Verdade, mas se for esse o caso, provavelmente não há regras de NAT / Port Forwarding para corresponder ssh a qualquer que seja o IP interno.
Kyle Brandt

@Kyle, que pode ser adicionado ...
nik

3
+1 paracurl http://myip.dnsomatic.com
JatSing

Semelhante a isso, há tambémcurl ifconfig.me
jwbensley 19/06/2013

19

/bin/hostname -i


3
Nesse caso, eu sugeriria usar hostname --all-ip-addresses. Exibir todos os endereços de rede do host. Esta opção enumera todos os endereços configurados em todas as interfaces de rede. A interface de loopback e os endereços locais de link IPv6 são omitidos. Ao contrário da opção -i, essa opção não depende da resolução de nomes. Não faça suposições sobre a ordem da saída.
Lrkwz

5
Shorter alternativa ao @ lrkwz do comentário/bin/hostname -I
hanxue

Obrigado @hanxue - isso deve ser uma resposta própria - o comando mais curto com a saída mais limpa - exatamente o que eu estava procurando! Na minha experiência (Ubuntu), /bin/hostname -iapenas dá 127.0.1.1, o que é inútil.
precisa


9
/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

Se você precisar do seu endereço interno, anexe sua interface após o ifconfig, por exemplo

 /sbin/ifconfig eth0|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}'

+1, é exatamente isso que eu precisava para resolver um problema. Viva para one-liners!
J. Polfer

+1 Sem a cabeça -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice

Obrigado, funciona no Debian, mas no OS X não funciona, retornando algum lixo. Seria ótimo se pudéssemos criar uma linha que funcione em ambos. Aqui é a saída do ifconfig no OS X: gist.github.com/ssbarnea/5814657
Sorin


3

Se você precisar descobrir qual é o endereço IP do seu roteador, poderá executar este comando.

dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

Se você estiver usando o OpenDNS para o seu servidor DNS, poderá reduzi-lo para:

dig + short myip.opendns.com

Você também pode usar este comando.

curl http://myip.dnsomatic.com

3

Se você possui várias interfaces, pode ser útil especificar qual você deseja IP. se você deseja o endereço IPV4 da interface 'eth0':

ip addr show dev eth0 | grep "inet " | awk '{ print $2 }' 

se você deseja o endereço IPV6 da interface 'eth0':

ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }' 

se você deseja procurar um IP entre duas interfaces comuns de um laptop, wlan0 e eth0:

CURRENT_IP=''
for INTERFACE in wlan0 eth0; do
    if [ -z $CURRENT_IP ]; then
        CURRENT_IP=$(ip addr show dev $INTERFACE | grep "inet " | awk '{ print $2 }')
    fi
done

3

Apenas enrole esta página :

$ curl wtfismyip.com/text


E como exatamente isso é superior aos serviços similares já mencionados durante esses anos?
Esa Jokinen 29/03

2

Aqui está uma linha que também funciona no Linux e OS X e retornará o primeiro endereço que não é local:

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

Enviar créditos para /programming//a/13322549/99834



1

A maneira mais simples de fazer isso é provavelmente

ifconfig eth0

supondo que a máquina tenha um único endereço IP na interface com fio padrão - você pode precisar

ifconfig wlan0

se estiver em WiFi.


1
ip address show scope link

Ele mostrará o endereço IP das interfaces de vida - tem link -. Mas não é um comando bash. O Bash não tem nenhuma capacidade de saber sobre IP e rede.


1

O que eu entendo é que você deseja conectar uma máquina ubuntu remota com ip dinâmico. Acesse o site dyndns.org e abra uma conta gratuita. Em seguida, na máquina remota, você precisa instalar uma ferramenta ip dinâmica.

sudo aptitude install dyndns-client

para que você possa ssh máquina remota via

ssh username@yourdynamicnamealias.dyndns.org

Portanto, após a configuração, você nunca precisará do endereço IP da máquina remota.


Este é o meu método preferido para lidar com IPs dinâmicos. O dyndns.org é um serviço fantástico e gratuito.
John Barrett

1

Aqui está o que eu estou usando:

LC_ALL=C /sbin/ifconfig | awk '
    /inet addr/ {
        gsub("addr:","");
        if(($2!="127.0.0.1") && ($2!="0.0.0.0") && ($2!=""))
            { print $2 };
    }'

1

se você precisar de apenas um IP da interface fornecida, poderá:

ifconfig eth0 | grep "inet " | awk '{gsub("addr:","",$2);  print $2 }' 


0

Se você estiver procurando por um endereço IP público da caixa , use o seguinte:

  • dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"

Você pode usar dig(1)opções como -4ou -6procurar especificamente um endereço IPv4 ou IPv6; O Google fornecerá uma resposta em um registro do TXTtipo, que terá aspas quando apresentado pordig ; se você quiser usar a variável posteriormente com utilitários como traceroute, você deve usar algo como tr (1) para remover as citações.

Outras opções incluem whoami.akamai.nete myip.opendns.com, que respondem com Ae AAAAregistros (em vez de TXTno exemplo acima do Google), portanto, não exigem a remoção das aspas:

  • dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

  • dig -4 @resolver1.opendns.com -t any myip.opendns.com +short

  • dig -6 @resolver1.opendns.com -t any myip.opendns.com +short

Aqui está um exemplo de script que usa todas as opções acima para definir as variáveis:

#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"

Se você estiver procurando por um endereço IP privado ou por um conjunto de todos os endereços IP atribuídos à caixa, poderá usar uma combinação de ifconfig(no BSD e GNU / Linux), ip addr(no GNU / Linux), hostname(opções -ie -Iem GNU / Linux) e netstatpara ver o que está acontecendo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.