¿Cómo encuentro mi dirección IP desde la línea de comando?

159

Sé que puede hacer ifconfig | grep inet, pero que muestra varias direcciones IPv4. ¿Cómo obtengo el específico para SSHing et al?

JShoe
fuente
Lo que está buscando no es su dirección IP de Mac sino la dirección IP pública que su ISP atribuyó a la interfaz de Internet de su enrutador.
dan

Respuestas:

168

Usar ipconfig getifaddr en1para conexión inalámbrica o ipconfig getifaddr en0para ethernet.

Actualización :

ipconfig getifaddr en0 es el predeterminado para la interfaz wifi.

daviesgeek
fuente
77
Esto muestra mi dirección IP interna (a mi enrutador) (por ejemplo, 192.168.1.xxx), no la dirección IP externa. (Al igual que la mayoría de las otras respuestas a continuación.)
ShreevatsaR
2
No funcionó para mí :(
Naveed Abbas
2
ifconfigmuestra todas las interfaces y sus IPs
aralar
44
echo IP externa:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb
30
Ha cambiado durante años, 'ipconfig getifaddr en0' es el predeterminado para la interfaz wifi
Marek Szmalc
98

Lo siguiente funciona para mí en 10.8 y en 10.10 Yosemite.

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

Si encuentra que lo anterior le da más de una respuesta, guarde lo siguiente en un script y ejecútelo

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
fuente
3
En mi opinión, debería ser la respuesta aceptada, ya que no requiere ninguna especificación por cable o inalámbrica.
Erik Nomitch
@ErikNomitch, excepto que me da 2 con esta respuesta
Zach Lysobey
Ah, me retracto entonces. @ZachLysobey
Erik Nomitch
Este es el mejor enfoque general, pero a veces es necesario hacer un poco más de trabajo antes de obtener una respuesta correcta y la respuesta correcta puede variar.
uchuugaka
Agregué un script que con suerte debería abordar este problema ... ¡para tu información!
Brad Parks
43

Solo escribe curl ifconfig.meen la terminal.

Kcidkcus
fuente
1
¿Por qué el voto negativo? Aunque es una IP externa, el comando es válido y funciona para mis inicios de sesión ssh.
CousinCocaine
55
Esta es la dirección IP pública y lo que estaba buscando. ipconfig getifaddr en0es para IP local.
abriggs
En HighSierra tuve que ejecutar esto como SUDO. Además de esto, enumera la dirección IP externa. Para la dirección IP interna, vea la respuesta de Brad Parks
Vincent
19

Tengo esto configurado en un archivo de puntos .aliases para la búsqueda frecuente de IP:

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

Puedes hacer lo siguiente:

Escriba ifconfigo ifconfig -a. Este comando le muestra la lista de interfaces junto con sus direcciones IP y MAC (la última solo si corresponde). También puede escribir ifconfig en0o solo ifconfig en1para la configuración de una interfaz en particular (como alguien dijo en sus respuestas, en0 es típicamente la Ethernet cableada mientras que en1 es la interfaz WiFi).

Como alternativa, netstat -ienumerará todas las interfaces y le mostrará las direcciones IP que ha asignado a cada una de ellas.

Normalmente, cuando tiene un demonio SSH ejecutándose en una caja, escuchará en todas las interfaces disponibles, es decir. puede usar cualquier dirección IP que esté configurada en su máquina para conectarse a esa máquina a través de SSH (esto, obviamente, sujeto a las reglas de Firewall). Si busca lo que el sistema operativo llama una interfaz primaria y una dirección IP primaria, puede usar el scutilcomando de esta manera:

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

Tenga en cuenta que lo anterior, aunque es un comando de línea de comandos, también es interactivo (por lo que debe ejecutar scutily luego ingresar sus propios comandos). El primer showcomando le indica el nombre de la interfaz principal para el sistema operativo (es decir, esta será la que figura en la parte superior de la lista en la ventana Preferencias del sistema / Preferencias de red), así como la dirección IP de su enrutador predeterminado. El segundo showcomando toma State:/Network/Interface/<ifname>/IPv4argumento (en este caso en0) y le da las direcciones IP asignadas. Está buscando la dirección en la matriz de Direcciones, las otras dos entradas son direcciones de difusión y las máscaras de red.

Espero que ayude, pero si algo no está claro, hágamelo saber.

Miguel
fuente
1
Gracias por esta respuesta Escribí un script rápido para obtener la IP de su interfaz principal: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

Para obtener la dirección IP de su computadora frente a Internet, aquí hay una receta funcional:

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

Debería funcionar incluso cuando tiene varias interfaces activas, incluso cuando tiene interfaces que no sabe cuál es realmente la puerta de enlace predeterminada.

dan
fuente
Esto obtiene la dirección IP de la red interna (por ejemplo 192.168.0.*), no la externa expuesta a Internet.
SimplGy
Gracias por este comentario ¿Podría decirme en qué versión del sistema operativo está? ¿Me podría proporcionar la salida de netstat -nr | grep default?
dan
Esto obtiene la IP de la interfaz que sirve el tráfico entrante / saliente. Si está detrás de NAT, eso le dará su dirección LAN, no la dirección WAN. Pero puede ser útil para muchos propósitos y no llega a la red.
folex
1

Solo para el registro, puede hacer un script bash con el siguiente contenido que le proporciona su dirección IP externa

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo
usuario702846
fuente
3
De forma predeterminada, wgetno forma parte de macOS y debe instalarse desde una fuente que no sea de Apple.
user3439894
¿Es la pregunta macOS específica? Por defecto, está instalado en muchas distribuciones de Linux.
user702846
Este sitio trata sobre el hardware y el software de Apple, por lo que se supone que macOS e iOS.
grg
El comando predeterminado de macOS para esto sería usando curl:curl -s http://ipecho.net/plain; echo
thibmaek