Comando Shell per ottenere l'indirizzo IP?


Risposte:



25

Puoi usare:

/bin/ip addr

3
@opierce Hai contrassegnato la risposta di mpbloch come corretta, ma come FYI dovresti utilizzare questa risposta, poiché fa parte della suite iproute2. ifconfigè in fase ora.
jwbensley,

3
Puoi accorciarlo semplicemente correndo ip a.
gak

19

Se si utilizza un indirizzo interno, verificare

curl http://myip.dnsomatic.com

potrebbe essere una buona idea su shell unix.
In alternativa, collega l'URL nel tuo browser.


Se si ottiene una risposta diversa da "il ifconfig -a" risultato,
l' ifconfigha dato il tuo indirizzo interno - che probabilmente non funzionerà dall'esterno.


Anche se tutto sembra a posto, potresti avere un firewall in atto che non consentirà connessioni ssh in entrata .
A quel punto dovresti provare la porta di interesse da un browser sulla macchina in,

http://www.canyouseeme.org/

Ciò confermerà la connettività tramite,

  • indirizzo IP esterno (mostrandolo su quella pagina)
  • NAT, Port Forward
  • firewall

Vero, ma se è così, probabilmente non ci sono regole NAT / Port Forwarding in atto per abbinare ssh a qualunque sia l'IP interno.
Kyle Brandt,

@Kyle, che può essere aggiunto ...
Nik

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

Simile a questo, c'è anchecurl ifconfig.me
jwbensley il

19

/bin/hostname -i


3
In questo caso, suggerirei di utilizzare hostname --all-ip-addresses. Visualizza tutti gli indirizzi di rete dell'host. Questa opzione enumera tutti gli indirizzi configurati su tutte le interfacce di rete. L'interfaccia di loopback e gli indirizzi link-local IPv6 sono omessi. Contrariamente all'opzione -i, questa opzione non dipende dalla risoluzione dei nomi. Non fare ipotesi sull'ordine dell'output.
lrkwz,

5
Alternativa più breve al commento di /bin/hostname -I
@lrkwz

Grazie @hanxue - questa dovrebbe essere una risposta a sé stante - il comando più breve con l'output più pulito - proprio quello che stavo cercando! Nella mia esperienza (Ubuntu), /bin/hostname -idà solo 127.0.1.1, il che è inutile.
Roger Dueck,


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

Se hai bisogno del tuo indirizzo interno aggiungi l'interfaccia dopo ifconfig, ad es

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

+1, questo è esattamente ciò di cui avevo bisogno per risolvere un problema. Evviva per una linea!
J. Polfer,

+1 Senza la testa -1: / sbin / ifconfig | grep inet | sed 's / \: / /' | awk 'NR == 1 {print $ 3}'
joeslice

Grazie, funziona su Debian ma su OS X non funziona, restituendo un po 'di immondizia. Sarebbe bello se potessimo uscire con una linea che funziona su entrambi. Ecco l'output di ifconfig su OS X: gist.github.com/ssbarnea/5814657
sorin


3

Se hai bisogno di scoprire quale sia l'indirizzo IP del tuo router, puoi eseguire questo comando.

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

Se stai usando OpenDNS per il tuo server DNS, puoi accorciarlo a:

dig + short myip.opendns.com

Puoi anche usare questo comando.

arricciatura http://myip.dnsomatic.com

3

Se hai più interfacce, potrebbe essere utile specificare quale vuoi IP. se si desidera l'indirizzo IPV4 dell'interfaccia 'eth0':

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

se si desidera l'indirizzo IPV6 dell'interfaccia 'eth0':

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

se si desidera cercare un IP tra due interfacce comuni di un laptop, wlan0 ed 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

Basta arricciare questa pagina :

$ curl wtfismyip.com/text


E in che modo questo è superiore ai servizi simili già menzionati in questi anni?
Esa Jokinen,

2

Ecco una riga che funziona anche su Linux e OS X e restituirà il primo indirizzo non locale:

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

Invia crediti a /programming//a/13322549/99834



1

Il modo più semplice per farlo è probabilmente

ifconfig eth0

supponendo che la macchina abbia un unico indirizzo IP sull'interfaccia cablata predefinita, potrebbe essere necessario

ifconfig wlan0

se è su WiFi.


1
ip address show scope link

Ti mostrerà l'indirizzo IP di living - has link - interfacce. Ma non è un comando bash. Bash non ha alcuna possibilità di conoscere IP e rete.


1

Quello che capisco è che vuoi connettere una macchina Ubuntu remota che ha un IP dinamico. Vai sul sito dyndns.org e apri un account gratuito. Quindi sul computer remoto è necessario installare uno strumento ip dinamico.

sudo aptitude install dyndns-client

così puoi ssh via macchina remota via

ssh username@yourdynamicnamealias.dyndns.org

Quindi dopo la configurazione non avrai mai bisogno dell'indirizzo IP della macchina remota.


Questo è il mio metodo preferito per gestire gli IP dinamici. dyndns.org è un servizio fantastico e gratuito.
John Barrett,

1

Ecco cosa sto 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 hai bisogno di un solo IP di una determinata interfaccia puoi fare:

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


0

Se stai cercando un indirizzo IP pubblico della casella , puoi utilizzare quanto segue:

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

È possibile utilizzare dig(1)opzioni come -4o -6in modo specifico aspetto per un indirizzo IPv4 o IPv6; Google fornirà una risposta in un record di TXTtipo, che avrà virgolette al suo interno quando presentato da dig; se vuoi successivamente usare la variabile con utility come traceroute, devi usare qualcosa come tr (1) per rimuovere le citazioni.

Altre opzioni includono whoami.akamai.nete myip.opendns.com, che rispondono con Ae AAAAregistrano (anziché TXTcome nell'esempio precedente di Google), quindi non richiedono la rimozione delle virgolette:

  • 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

Ecco uno script di esempio che utilizza tutte le opzioni sopra per impostare le variabili:

#!/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 stai cercando un indirizzo IP privato o un set di tutti gli indirizzi IP assegnati al box, potresti usare una combinazione di ifconfig(su BSD e GNU / Linux), ip addr(su GNU / Linux), hostname(opzioni -ie -Isu GNU / Linux) e netstatper vedere cosa sta succedendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.