Comment trouver mon adresse IP à partir de la ligne de commande?

159

Je sais que vous pouvez le faire ifconfig | grep inet, mais cela vous montre plusieurs adresses IPv4. Comment puis-je obtenir le spécifique pour SSHing et al?

JShoe
la source
Ce que vous recherchez, ce n’est pas votre adresse IP Mac, mais l’ adresse IP publique attribuée par votre fournisseur de services Internet à l’interface Internet de votre routeur.
Dan

Réponses:

168

Utilisez ipconfig getifaddr en1pour le sans fil, ou ipconfig getifaddr en0pour Ethernet.

Mise à jour :

ipconfig getifaddr en0 est la valeur par défaut pour l'interface wifi.

Daviesgeek
la source
7
Cela montre mon adresse IP interne (à mon routeur) (par exemple 192.168.1.xxx), pas l’adresse IP externe. (Comme la plupart des autres réponses ci-dessous.)
ShreevatsaR
2
N'a pas travaillé pour moi :(
Naveed Abbas
2
ifconfigaffiche toutes les interfaces et leurs adresses IP
aralar
4
echo curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
Adresse
30
Il a changé depuis des années, 'ipconfig getifaddr en0' est le paramètre par défaut pour l'interface wifi
Marek Szmalc le
98

Ce qui suit fonctionne pour moi sur 10.8 et 10.10 Yosemite.

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

Si vous trouvez que ce qui précède vous donne plus d'une réponse, enregistrez ce qui suit dans un script et exécutez-le à la place.

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
la source
3
Le devrait être la réponse acceptée à mon avis puisqu'il ne nécessite aucune spécification câblé ou sans fil.
Erik Nomitch
@ErikNomitch sauf que cela me donne 2 avec cette réponse
Zach Lysobey
Ah, je me rétracte alors. @ZachLysobey
Erik Nomitch
C'est la meilleure approche globale, mais il faut parfois faire un peu plus d'effort avant awk pour obtenir la bonne réponse, laquelle peut varier.
Uchuugaka
J'ai ajouté un script qui devrait, espérons-le, résoudre ce problème .. fyi!
Brad Parks
43

Il suffit de taper curl ifconfig.medans le terminal.

Kcidkcus
la source
1
Pourquoi le vote négatif? Bien que ce soit une adresse IP extérieure, la commande est valide et fonctionne pour mes connexions ssh.
CousinCocaine
5
C'est l'adresse IP publique et ce que je cherchais. ipconfig getifaddr en0est pour IP locale.
Abriggs
Sur HighSierra, je devais exécuter ceci en tant que SUDO. Outre cela répertorie l'adresse IP externe. Pour l'adresse IP interne, voir la réponse de Brad Parks
Vincent le
19

J'ai ceci mis en place dans un fichier .aliases pour la recherche fréquente sur ip:

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

Vous pouvez faire ce qui suit:

Tapez ifconfigou ifconfig -a. Cette commande vous montre la liste des interfaces avec leurs adresses IP et MAC (la dernière uniquement si applicable). Vous pouvez également taper ifconfig en0ou ifconfig en1pour la configuration d'une interface particulière uniquement (comme quelqu'un l'a dit dans ses réponses, en0 est généralement Ethernet câblé tandis que en1 est l'interface WiFi).

Comme alternative, netstat -ilistera toutes les interfaces et vous montrera les adresses IP que vous avez attribuées à chacun d'eux.

Généralement, lorsque le démon SSH s'exécute sur une boîte, il écoute toutes les interfaces disponibles, c.-à-d. vous pouvez utiliser n'importe quelle adresse IP configurée sur votre ordinateur pour vous connecter à cet ordinateur via SSH (ceci, évidemment, sous réserve des règles du pare-feu). Si vous êtes après ce que le système d'exploitation appelle une interface principale et une adresse IP principale, vous pouvez utiliser la scutilcommande comme ceci:

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
  }
}

Notez que ce qui précède, même s’il s’agit d’une commande de ligne de commande, est également interactif (vous devez donc exécuter scutilpuis entrer ses propres commandes). La première showcommande vous indique le nom de l’interface principale du système d’exploitation (c’est-à-dire celui qui se trouve en haut de la liste dans la fenêtre Préférences Système / Réseau), ainsi que l’adresse IP de votre routeur par défaut. La deuxième showcommande prend en State:/Network/Interface/<ifname>/IPv4argument (dans ce cas, en0) et vous donne les adresses IP qui lui sont attribuées. Vous recherchez l'adresse dans le tableau Adresses, les deux autres entrées sont des adresses de diffusion et les masques de réseau.

J'espère que ça aide, mais si quelque chose n'est pas clair, faites le moi savoir.

Mike
la source
1
Merci pour cette réponse. J'ai écrit un script rapide pour obtenir l'adresse IP de votre interface 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

Pour obtenir l'adresse IP de votre ordinateur face à Internet, voici un reçu qui fonctionne:

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

Cela devrait fonctionner même lorsque plusieurs interfaces sont actives, même si vous avez des interfaces dont vous ne savez pas quelle est la passerelle par défaut.

dan
la source
Cela donne l’adresse IP du réseau interne (par exemple 192.168.0.*)
:,
Merci pour ce retour Pourriez-vous me dire sur quelle version de l'OS vous êtes? Pourriez-vous me fournir la sortie de netstat -nr | grep default?
dan
Cela obtient l'IP de l'interface qui sert le trafic entrant / sortant. Si vous êtes derrière NAT, cela donnera votre adresse LAN, pas l'adresse WAN. Mais cela peut être utile pour beaucoup de choses, et cela n'atteint pas le réseau.
folex
1

Juste pour information, vous pouvez créer un script bash avec le contenu suivant, qui vous donne votre adresse IP externe.

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo
utilisateur702846
la source
3
Par défaut, il wgetne fait pas partie de macOS et doit être installé à partir d'une source autre que Apple.
user3439894
La question macOS est-elle spécifique? il est installé par défaut sur de nombreuses distributions Linux.
user702846 le
Ce site concerne le matériel et les logiciels Apple. MacOS et iOS sont donc présumés.
grg
La commande par défaut macOS pour cela serait en utilisant curl:curl -s http://ipecho.net/plain; echo
thibmaek