Ich weiß, dass Sie das können ifconfig | grep inet
, aber das zeigt Ihnen mehrere IPv4-Adressen. Wie bekomme ich die spezifische für SSHing et al?
Ich weiß, dass Sie das können ifconfig | grep inet
, aber das zeigt Ihnen mehrere IPv4-Adressen. Wie bekomme ich die spezifische für SSHing et al?
Antworten:
Verwenden Sie ipconfig getifaddr en1
für drahtlose oder ipconfig getifaddr en0
für Ethernet.
Update :
ipconfig getifaddr en0
ist die Standardeinstellung für die WLAN-Schnittstelle.
ifconfig
zeigt alle Schnittstellen und ihre IPs
curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
Folgendes funktioniert für mich am 10.8 und am 10.10 Yosemite.
ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'
Wenn Sie feststellen, dass das oben Gesagte mehr als eine Antwort liefert, speichern Sie Folgendes in einem Skript und führen Sie es stattdessen aus
#!/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
Tippen Sie einfach curl ifconfig.me
das Terminal ein.
ipconfig getifaddr en0
ist für lokale IP.
Sie können Folgendes tun:
Typ ifconfig
oder ifconfig -a
. Dieser Befehl zeigt Ihnen die Liste der Schnittstellen mit ihren IP- und MAC-Adressen an (letztere nur, falls zutreffend). Sie können auch ifconfig en0
oder nur ifconfig en1
für die Konfiguration einer bestimmten Schnittstelle eingeben (wie in den Antworten angegeben, ist en0 normalerweise das verkabelte Ethernet, während en1 die WiFi-Schnittstelle ist).
Alternativ netstat -i
werden alle Schnittstellen aufgelistet und die ihnen jeweils zugewiesenen IP-Adressen angezeigt.
Wenn ein SSH-Dämon auf einer Box ausgeführt wird, überwacht er normalerweise alle verfügbaren Schnittstellen, d. H. Sie können jede IP-Adresse verwenden, die auf Ihrem Computer konfiguriert ist, um über SSH eine Verbindung zu diesem Computer herzustellen (dies unterliegt natürlich den Firewall-Regeln). Wenn Sie nach dem suchen, was das Betriebssystem als primäre Schnittstelle und primäre IP-Adresse bezeichnet, können Sie den folgenden scutil
Befehl verwenden:
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
}
}
Beachten Sie, dass der obige Befehl auch interaktiv ist, obwohl er ein Befehlszeilenbefehl ist (Sie führen ihn also aus scutil
und geben dann seine eigenen Befehle ein). Der erste show
Befehl teilt Ihnen den Namen der primären Schnittstelle für das Betriebssystem mit (dh diese steht in den Systemeinstellungen / Netzwerkeinstellungen ganz oben auf der Liste) sowie die IP-Adresse Ihres Standard-Routers. Der zweite show
Befehl benötigt ein State:/Network/Interface/<ifname>/IPv4
Argument (in diesem Fall en0
) und gibt Ihnen die ihm zugewiesenen IP-Adressen an. Sie suchen nach der Adresse im Array "Adressen", die anderen beiden Einträge sind Broadcast-Adressen und die Netzmasken.
Hoffe das hilft, aber wenn irgendetwas nicht klar ist, lass es mich wissen.
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})"
Hier ist ein Rezept, um die IP-Adresse Ihres Computers im Internet zu ermitteln:
if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'
Es sollte auch funktionieren, wenn Sie mehrere Schnittstellen aktiv haben, auch wenn Sie Schnittstellen haben, von denen Sie nicht wissen, welche das Standard-Gateway ist.
192.168.0.*)
nicht die externe, die dem Internet ausgesetzt ist.
netstat -nr | grep default
?
Nur zur Veranschaulichung, Sie können ein Bash-Skript mit dem folgenden Inhalt erstellen, das Ihre externe IP-Adresse angibt
#!/bin/bash
wget -qO - http://ipecho.net/plain; echo
wget
ist es kein Bestandteil von macOS und muss von einer Quelle installiert werden, die nicht von Apple stammt.
curl -s http://ipecho.net/plain; echo