Wie finde ich meine IP-Adresse über die Befehlszeile?

159

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?

JShoe
quelle
Was Sie suchen, ist nicht Ihre Mac-IP-Adresse, sondern die öffentliche IP-Adresse, die Ihr ISP der Internetschnittstelle Ihres Routers zuweist.
dan

Antworten:

168

Verwenden Sie ipconfig getifaddr en1für drahtlose oder ipconfig getifaddr en0für Ethernet.

Update :

ipconfig getifaddr en0 ist die Standardeinstellung für die WLAN-Schnittstelle.

Daviesgeek
quelle
7
Hier wird meine interne (zu meinem Router) IP-Adresse angezeigt (z. B. 192.168.1.xxx), nicht die externe IP-Adresse. (Wie die meisten anderen Antworten weiter unten.)
ShreevatsaR
2
Hat bei mir nicht funktioniert :(
Naveed Abbas
2
ifconfigzeigt alle Schnittstellen und ihre IPs
Aralar
4
echo Externe IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb 16.08.16
30
Es hat sich seit Jahren geändert, 'ipconfig getifaddr en0' ist Standard für WLAN-Schnittstelle
Marek Szmalc
98

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

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
Brad Parks
quelle
3
Dies sollte meiner Meinung nach die akzeptierte Antwort sein, da es keine drahtgebundenen oder drahtlosen Spezifikationen erfordert.
Erik Nomitch
@ ErikNomitch, außer es gibt mir 2 mit dieser Antwort
Zach Lysobey
Ah, dann ziehe ich mich zurück. @ZachLysobey
Erik Nomitch
Dies ist der beste Gesamtansatz, aber manchmal muss man ein bisschen mehr grübeln, bevor awk die richtige Antwort erhält, und die richtige Antwort kann variieren.
Uchuugaka
Ich habe ein Skript hinzugefügt, das dieses Problem hoffentlich beheben sollte.
Brad Parks
43

Tippen Sie einfach curl ifconfig.medas Terminal ein.

Kcidkcus
quelle
1
Warum die Gegenstimme? Obwohl es sich um eine externe IP handelt, ist der Befehl gültig und funktioniert für meine SSH-Anmeldungen.
CousinCocaine
5
Dies ist die öffentliche IP-Adresse und was ich gesucht habe. ipconfig getifaddr en0ist für lokale IP.
abriggs
Auf HighSierra musste ich dies als SUDO ausführen. Außerdem wird die externe IP-Adresse aufgelistet. Die interne IP-Adresse finden Sie in der Antwort von Brad Parks
Vincent
19

Ich habe dieses Setup in einer .aliases-Dot-Datei für häufiges Nachschlagen von IP-Adressen:

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

Sie können Folgendes tun:

Typ ifconfigoder 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 en0oder nur ifconfig en1fü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 -iwerden 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 scutilBefehl 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 scutilund geben dann seine eigenen Befehle ein). Der erste showBefehl 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 showBefehl benötigt ein State:/Network/Interface/<ifname>/IPv4Argument (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.

Mike
quelle
1
Danke für diese Antwort. Ich habe ein schnelles Skript geschrieben, um die IP Ihrer primären Schnittstelle 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})"
zuzuweisen
4

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.

Dan
quelle
Dies erhält die interne Netzwerk-IP-Adresse (z. B .: 192.168.0.*)nicht die externe, die dem Internet ausgesetzt ist.
SimplGy
Vielen Dank für dieses Feedback. Könnten Sie mir sagen, auf welcher Version des Betriebssystems Sie sind? Könnten Sie mir die Ausgabe von liefern netstat -nr | grep default?
Dan
Dies ruft die IP der Schnittstelle ab, die eingehenden / ausgehenden Datenverkehr bedient. Wenn Sie sich hinter NAT befinden, wird Ihre LAN-Adresse und nicht die WAN-Adresse angegeben. Aber es kann für viele Zwecke nützlich sein und greift nicht nach dem Netzwerk.
Folex
1

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
user702846
quelle
3
Standardmäßig wgetist es kein Bestandteil von macOS und muss von einer Quelle installiert werden, die nicht von Apple stammt.
user3439894
Ist die Frage MacOS-spezifisch? Es ist standardmäßig auf vielen Linux-Distributionen installiert.
user702846
Auf dieser Website geht es um Apple-Hardware und -Software, daher wird von MacOS und iOS ausgegangen.
grg
Der Standardbefehl für macOS ist curl:curl -s http://ipecho.net/plain; echo
thibmaek