So che puoi fare ifconfig | grep inet
, ma questo ti mostra diversi indirizzi IPv4. Come ottengo quello specifico per SSHing et al?
Utilizza ipconfig getifaddr en1
per wireless o ipconfig getifaddr en0
per ethernet.
I seguenti lavori per me sono il 10.8 e il 10.10 Yosemite.
ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'
Se ritieni che quanto sopra ti dà più di una risposta, salva quanto segue in uno script ed eseguilo invece
#!/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
Puoi fare quanto segue:
Digita ifconfig
o ifconfig -a
. Questo comando mostra l'elenco delle interfacce con i relativi indirizzi IP e MAC (quest'ultimo solo se applicabile). Puoi anche digitare ifconfig en0
o ifconfig en1
solo per la configurazione di una particolare interfaccia (come qualcuno ha detto nelle loro risposte, en0 è tipicamente l'Ethernet cablato mentre en1 è l'interfaccia WiFi).
In alternativa, netstat -i
elencherà tutte le interfacce e ti mostrerà gli indirizzi IP che hai assegnato a ciascuno di essi.
In genere, quando il daemon SSH è in esecuzione su una scatola, ascolterà su 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 cerchi cosa il sistema operativo chiama un'interfaccia principale e l'indirizzo IP primario, puoi utilizzare il comando scutil
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 scutil
e quindi si immettono i propri comandi in esso). Il primo comando show
indica il nome dell'interfaccia principale per il sistema operativo (vale a dire questo sarà quello in cima all'elenco nella finestra Preferenze di sistema / Preferenze di rete), nonché l'indirizzo IP del router predefinito. Il secondo comando show
accetta l'argomento State:/Network/Interface/<ifname>/IPv4
(in questo caso en0
) e ti assegna gli indirizzi IP assegnati. Stai cercando l'indirizzo nella matrice Indirizzi, le altre due voci sono gli indirizzi di trasmissione e le maschere di rete.
Spero che questo aiuti, ma se qualcosa non è chiaro, fammi sapere.
Ho questo set up in un file .aliases dotfile per la ricerca ip frequente:
alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"
Per ottenere l'indirizzo IP del computer di fronte a Internet, ecco a ricetta funzionante:
if='netstat -nr | awk '{ if ($1 ~/default/) { print $6} }''
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'
Dovrebbe funzionare anche quando sono attive più interfacce, anche quando hai interfacce non sai quale sia in realtà la gateway predefinito.
Solo per il record, 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