Estoy tratando de usar solo la dirección IP (inet) como parámetro en un script que escribí.
¿Existe una manera fácil en un terminal Unix de obtener solo la dirección IP, en lugar de mirar a través ifconfig
?
shell
unix
ip-address
Masón
fuente
fuente
ip -o address
es mucho más fácil trabajar con la salida de que con la salida deip address
.Respuestas:
Puede escribir un script que solo devuelva la IP como:
Para Mac:
O para el sistema linux
fuente
hostname -i
en el mío devuelve:::1 127.0.1.1 192.168.1.100
hostname
no es portátil.Esto le dará todas las interfaces IPv4, incluido el loopback 127.0.0.1:
Esto solo mostrará
eth0
:Y de esta manera puede obtener direcciones IPv6:
Solo
eth0
IPv6:fuente
grep -oP
error en busybox v1.24.1: opción no válida - P-P
cambiar las expresiones regulares de Perl o de lo contrario no podemos usar el(?<=inet\s)
token de búsqueda hacia atrás . Puede obtener un resultado similar ejecutandogrep -oe 'inet [0-9\.]\+'
o,grep -oe 'inet6 [0-9a-f:]\+'
pero de esta manera no puedo deshacerme de la primera palabra. En SuSEman grep
informa que la-P
bandera es experimental.ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
En general, nunca se garantiza que un sistema solo tendrá una dirección IP, por ejemplo, puede tener conexiones Ethernet y WLAN, y si tiene una conexión VPN activa, tendrá otra dirección IP.
Linux
En Linux,
hostname -I
mostrará la (s) dirección (es) IP actuales. Confiar en que siempre devuelva solo una dirección IP probablemente no funcionará como se espera en algunos escenarios (es decir, un enlace VPN está activo), por lo que una forma más confiable sería convertir el resultado en una matriz y luego recorrer los elementos:OSX
En OSX, si conoce la interfaz , puede usar:
que devolverá solo la dirección IP.
O puede recorrer los posibles nombres de interfaz, comenzando con un sufijo, es decir
en
:Además, la obtención de la dirección IP se vuelve no determinista en caso de que se establezcan conexiones por cable y wifi, cuando una máquina tiene más de una interfaz Ethernet o cuando hay túneles VPN presentes.
Obtener la IP externa
Si necesita la IP externa, puede consultar un servicio en modo texto, por ejemplo
curl https://ipecho.net/plain
, devolvería una IP externa de texto sin formato .Y una forma aún más rápida de obtener la IP externa es consultar un servidor DNS conocido:
fuente
Este comando le dará la dirección IP exacta que desee en Ubuntu.
fuente
En las últimas versiones de Ubuntu ( 14.04 - 16.04 ), este comando funcionó para mí.
fuente
print $1
puede o no darte el resultado correcto.Si tiene un entorno limitado, puede usar este comando:
fuente
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
. Para v4 y v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
hacer una:ip -4 addr show | grep 192
Para obtener solo la dirección IP en Mac OS X , puede escribir el siguiente comando:
fuente
El comando
ifconfig
está obsoleto y debería usar elip
comando en Linux.También
ip a
le dará alcance en la misma línea que IP para que sea más fácil de usar.Este comando le mostrará su IP global (externa):
Todo IPv4 (también 127.0.0.1):
Todo IPv6 (también :: 1):
fuente
Simplemente podemos usar solo 2 comandos (ifconfig + awk) para obtener solo la IP (v4) que queremos así:
En Linux, suponiendo que obtenga la dirección IP de la
eth0
interfaz, ejecute el siguiente comando:En OSX, suponiendo obtener la dirección IP de la
en0
interfaz, ejecute el siguiente comando:Para conocer nuestra IP pública / externa, agregue esta función en
~/.bashrc
Entonces corre,
whatismyip
fuente
Para imprimir solo la dirección IP de
eth0
, sin otro texto:Para determinar su interfaz principal (porque puede que no sea "eth0"), use:
Las dos líneas anteriores se pueden combinar en un solo comando como este:
fuente
Quería algo simple que funcionara como un alias de Bash. Descubrí que
hostname -I
funciona mejor para mí (nombre de host v3.15).hostname -i
devuelve la IP de loopback, por alguna razón, perohostname -I
me da la IP correcta para wlan0, y sin tener que canalizar la salida a través de grep o awk. Un inconveniente es quehostname -I
generará todas las direcciones IP, si tiene más de una.fuente
Eso haría el truco en una Mac:
Eso se resolvió
ping 192.168.1.2
en mi máquina.Consejo profesional :
$(...)
significa ejecutar lo que esté dentro de los paréntesis en una subcapa y devolverlo como valor.fuente
En
man hostname
hay aún más fácil de forma que automáticamente excluido de bucle invertido IP y mostrando sólo el espacio lista de todos ellos adscritos a las direcciones IP de host separados:fuente
También puede utilizar el siguiente comando:
NOTA: Esto solo funcionará si tiene conectividad a Internet.
fuente
Algunas respuestas parecen estar utilizando el nuevo
ip
comando (reemplazo paraifconfig
) así que aquí es uno que utilizaip addr
,grep
yawk
para imprimir simplemente la dirección IPv4 asociada a lawlan0
interfaz:Si bien no es la solución más compacta o elegante, es (posiblemente) fácil de entender (ver la explicación a continuación) y modificar para otros fines, como obtener los últimos 3 octetos de la dirección MAC de esta manera:
Explicación:
ip addr show wlan0
genera información asociada con la interfaz de red nombradawlan0
, que debería ser similar a esta:Siguiente
grep inet
filtra las líneas que no contienen "inet" (IPv4 y IPv6 configuración) ygrep -v inet6
filtra las líneas restantes que hacen contener "inet6", lo que debería resultar en una sola línea como la siguiente:Finalmente, el primero
awk
extrae el campo "172.18.18.1/24" y el segundo elimina la taquigrafía de la máscara de red, dejando solo la dirección IPv4.Además, creo que vale la pena mencionar que si está escribiendo un script, a menudo hay muchas herramientas más ricas y / o más sólidas para obtener esta información, que quizás desee utilizar en su lugar. Por ejemplo, si usa Node.js
ipaddr-linux
, si usa Rubylinux-ip-parser
, etc.Consulte también /unix/119269/how-to-get-ip-address-using-shell-script
fuente
Utilice el siguiente comando:
fuente
Aquí está mi versión, en la que puede pasar una lista de interfaces, ordenadas por prioridad:
Entonces, si estoy conectado con VPN, Wifi y ethernet, se devolverá mi dirección de VPN (en la interfaz tap0). El script funciona tanto en linux como en osx, y puede aceptar argumentos si desea anular IFLIST
Tenga en cuenta que si desea utilizar IPV6, deberá reemplazar 'inet' por 'inet6'.
fuente
Siempre termino necesitando esto en los momentos más inesperados y, sin falta, termino buscando hilos como este en SO. Así que escribí un script simple para obtener direcciones IPv4 a través de netstat, llamado
echoip
- puedes encontrarlo aquí . El bash para direcciones de red se ve así, también obtiene su dirección pública de ipecho.net:El
echoip
script produce una salida como esta:fuente
use este script de una línea:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
mac y linux (probado en ubuntu) ambos funcionan.fuente
ifconfig en0
oifconfig eth1
etc si conoce la interfaz que desea :)Prefiero no usar
awk
y tal en scripts ..ip
tiene la opción de generar en JSON.Si omite,
$interface
obtendrá todas las direcciones IP:fuente
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
muestra todas tus ips
fuente
En Redhat de 64 bits, este problema me resolvió.
fuente
fuente
Al buscar su dirección IP externa en un host con NAT, algunas respuestas sugieren usar métodos basados en HTTP como,
ifconfig.me
por ejemplo:A lo largo de los años, he visto muchos de estos sitios ir y venir, encuentro que este método basado en DNS es más robusto:
Tengo este útil alias en mi
~/.bashrc
:fuente
Estas dos formas funcionaron para mí:
Para obtener la dirección IP de su interfaz eth0. Reemplace eth0 en el siguiente ejemplo con el nombre de su interfaz.
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
Usando el nombre de host: Esto le dará el inet, es decir, la dirección IP de su etho. el uso de -I le dará el valor inet de todas las interfaces donde sea que este valor esté presente.
hostname -i
fuente
Esto devuelve solo la dirección IP de su sistema.
fuente
Usaría
Hostname -L
para obtener solo la IP para usar como variable en un script.fuente
hostname -i
ohostname -I
?user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$
1. El capitalH
es incorrecto 2. No tal-L