Come trovo il mio indirizzo IP dalla riga di comando?


159

So che puoi farlo ifconfig | grep inet, ma questo ti mostra diversi indirizzi IPv4. Come posso ottenere quello specifico per SSHing et al?


Quello che stai cercando non è il tuo indirizzo IP Mac ma l' indirizzo IP pubblico attribuito al tuo ISP all'interfaccia Internet del tuo router.
dan

Risposte:


168

Utilizzare ipconfig getifaddr en1per wireless o ipconfig getifaddr en0Ethernet.

Aggiornamento :

ipconfig getifaddr en0 è predefinito per l'interfaccia wifi.


7
Questo mostra il mio indirizzo IP interno (al mio router) (es. 192.168.1.xxx), non l'indirizzo IP esterno. (Come la maggior parte delle altre risposte di seguito).
ShreevatsaR,

2
Non ha funzionato per me :(
Naveed Abbas

2
ifconfigmostra tutte le interfacce e i loro IP
aralar

4
echo IP esterno:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb

30
È cambiato da anni, 'ipconfig getifaddr en0' è predefinito per l'interfaccia wifi
Marek Szmalc

98

Quanto segue funziona per me il 10.8 e il 10.10 Yosemite.

ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' 

Se trovi quanto sopra ti dà più di una risposta, salva quanto segue in uno script ed eseguilo invece

ip_address.sh

#!/usr/bin/env bash

dumpIpForInterface()
{
  IT=$(ifconfig "$1") 
  if [[ "$IT" != *"status: active"* ]]; then
    return
  fi
  if [[ "$IT" != *" broadcast "* ]]; then
    return
  fi
  echo "$IT" | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
}

main()
{
  # snagged from here: https://superuser.com/a/627581/38941
  DEFAULT_ROUTE=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
  if [ -n "$DEFAULT_ROUTE" ]; then
    dumpIpForInterface "$DEFAULT_ROUTE"
  else
    for i in $(ifconfig -s | awk '{print $1}' | awk '{if(NR>1)print}')
    do 
      if [[ $i != *"vboxnet"* ]]; then
        dumpIpForInterface "$i"
      fi
    done
  fi
}

main

3
A mio avviso, dovrebbe essere la risposta accettata poiché non richiede alcuna specifica cablata o wireless.
Erik Nomitch,

@ErikNomitch tranne che mi dà 2 con questa risposta
Zach Lysobey,

Ah, allora mi ritraggo. @ZachLysobey
Erik Nomitch,

questo è il miglior approccio generale, ma a volte bisogna fare un po 'più grepping prima di awk per ottenere la risposta giusta e la risposta giusta potrebbe variare.
Uchuugaka,

Ho aggiunto uno script che dovrebbe sperare di risolvere questo problema.
Brad Parks,

43

Digita semplicemente curl ifconfig.meil terminale.


1
Perché il downvote? Sebbene sia un IP esterno, il comando è valido e funziona per i miei accessi ssh.
Cugina Cocaina,

5
Questo è l'indirizzo IP pubblico e quello che stavo cercando. ipconfig getifaddr en0è per IP locale.
abriggs

Su HighSierra ho dovuto eseguire questo come SUDO. Oltre a questo elenca l'indirizzo IP esterno. Per l'indirizzo IP interno vedere la risposta di Brad Parks
Vincent

19

Ho impostato questo in un dotfile .aliases per una frequente ricerca ip:

alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"

17

Puoi fare quanto segue:

Digitare ifconfigo ifconfig -a. Questo comando mostra l'elenco delle interfacce insieme ai loro indirizzi IP e MAC (quest'ultimo solo se applicabile). Puoi anche digitare ifconfig en0o solo ifconfig en1per la configurazione di una particolare interfaccia (come qualcuno ha detto nelle loro risposte, en0 è in genere la Ethernet cablata mentre en1 è l'interfaccia WiFi).

In alternativa, netstat -ielencherà tutte le interfacce e ti mostrerà gli indirizzi IP che hai assegnato a ciascuna di esse.

In genere, quando si ha un demone SSH in esecuzione su una scatola, ascolterà tutte le interfacce disponibili, ad es. puoi utilizzare qualsiasi indirizzo IP configurato sulla tua macchina per collegarti a quella macchina tramite SSH (questo, ovviamente, soggetto alle regole del Firewall). Se stai cercando ciò che il sistema operativo chiama un'interfaccia primaria e un indirizzo IP primario, puoi utilizzare il scutilcomando in questo modo:

MacBook:~ scutil
> show State:/Network/Global/IPv4
<dictionary> {
  PrimaryInterface : en0
  PrimaryService : C0550F84-5C07-484F-8D62-C8B90DC977D8
  Router : 10.103.4.1
}
> show State:/Network/Interface/en0/IPv4
<dictionary> {
  Addresses : <array> {
    0 : 10.103.4.234
  }
  BroadcastAddresses : <array> {
    0 : 10.103.4.255
  }
  SubnetMasks : <array> {
    0 : 255.255.255.0
  }
}

Si noti che quanto sopra, anche se è un comando da riga di comando, è anche interattivo (quindi si esegue scutile quindi si inseriscono i propri comandi in esso). Il primo showcomando ti dice il nome dell'interfaccia principale per il sistema operativo (cioè questo sarà quello in cima all'elenco nella finestra Preferenze di sistema / Preferenze di rete), così come l'indirizzo IP del tuo router predefinito. Il secondo showcomando prende State:/Network/Interface/<ifname>/IPv4argomento (in questo caso en0) e ti dà gli indirizzi IP ad esso assegnati. Stai cercando l'indirizzo nell'array Addresses, le altre due voci sono indirizzi broadcast e maschere di rete.

Spero che sia d'aiuto, ma se qualcosa non è chiaro, fammi sapere.


1
Grazie per questa risposta Ho scritto un breve script per ottenere l'IP come interfaccia principale:echo "show State:/Network/Interface/$(echo 'show State:/Network/Global/IPv4' | scutil | grep 'PrimaryInterface ' | sed 's/ PrimaryInterface : //')/IPv4" | scutil | pcregrep -Mo1 " Addresses : <array> {\n 0 : ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
DC_

4

Per ottenere l'indirizzo IP del tuo computer rivolto verso Internet, ecco una ricevuta funzionante:

if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'

Dovrebbe funzionare anche quando hai più interfacce attive, anche quando hai interfacce che non sai quale sia effettivamente il gateway predefinito.


Questo ottiene l'indirizzo IP della rete interna (ad es. 192.168.0.*), Non quello esterno esposto a Internet.
SimplGy

Grazie per questo feedback Potresti dirmi su quale versione del sistema operativo sei? Potresti fornirmi l'output di netstat -nr | grep default?
dan

Questo ottiene l'IP dell'interfaccia che serve il traffico in / outbound. Se sei dietro NAT, questo fornirà il tuo indirizzo LAN, non l'indirizzo WAN. Ma può essere utile per molti scopi e non raggiunge la rete.
folex,

1

Solo per la cronaca, puoi creare uno script bash con il seguente contenuto che ti dà il tuo indirizzo IP esterno

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo

3
Per impostazione predefinita, wgetnon fa parte di macOS e deve essere installato da una fonte non Apple.
user3439894

La domanda macOS è specifica? è installato di default su molte distribuzioni di Linux.
user702846

Questo sito riguarda l'hardware e il software Apple, quindi si presume che macOS e iOS.
GRG

Il comando macOS predefinito per questo sarebbe usando curl:curl -s http://ipecho.net/plain; echo
thibmaek l'
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.