ver saber redes publica para mac comandos comando osx bash awk ifconfig

osx - saber - Parse ifconfig para obtener solo mi dirección IP usando Bash



ver ip en linux (19)

Quiero editar el archivo bashrc para tener una función simple llamada "myip" para ejecutar. Como se puede adivinar, la función myip solo imprime mi dirección IP interna de mi máquina.

Mientras más trabajo, este es el guión:

ifconfig en1 | awk ''{ print $2}'' | sort

Lo cual obtuvo mi resultado:

10.0.0.12 options=1<PERFORMNUD> flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> fe80::daa2:5eff:fe96:ba2f%en1 d8:a2:5e:96:ba:2f autoselect active

Estoy trabajando en Mac OS X.

¿Cómo puedo hacer esto?


No es necesario realizar un análisis de ifconfig no transportable en Bash. Es un trampolín trivial en Python:

python -c ''import socket; print(socket.gethostbyname(socket.gethostname()))''


Si estás buscando solo "inet" y no "inet6", esto funciona para mí:

/usr/bin/ifconfig eth0 | grep --word-regexp inet | awk ''{print $2}''

"--word-regexp" hará que grep busque la palabra completa "inet" y no coincida con los parciales de las palabras, es decir, "inet" no coincidirá con "inet6" - "inet" solo coincidirá con las líneas con "inet" en ellas .


Similar a JSR, pero con awk y cut en orden inverso:

my_ip=$(ifconfig en1 | grep ''inet addr'' | awk ''{print $2}'' | cut -d: -f 2) echo ${my_ip}


Esto funciona para mí:
ifconfig eth0 | awk ''/inet addr/{print substr($2,6)}''


Código que trabaja en VDS / VPS también:

ifconfig | grep -A2 "venet0:0/|eth0" | grep ''inet addr:'' | sed -r ''s/.*inet addr:([^ ]+).*//1/'' | head -1

o

ifconfig | grep ''inet addr:'' | grep -v 127.0.0.1 | head -n1 | cut -f2 -d: | cut -f1 -d '' ''


ifconfig eth0 | awk ''/inet addr/{sub("addr:",""); print $2}''


Hay otra manera fácil de separar la dirección IP del análisis ifconfig.

hostname -I -I, --all-ip-addresses all addresses for the host -i, --ip-address addresses for the hostname

Ref: http://linux.die.net/man/1/hostname

Ejemplo:

[ec2-user @ terraform ~] $ hostname -I
10.10.10.10


Tomando la respuesta del parche , haciéndolo un poco más general,

es decir: omitiendo todo hasta el primer dígito.

ifconfig eth0 | awk ''/inet addr/{sub(/[^0-9]*/,""); print $1}''

O mejor:

ifconfig eth0 | awk ''/inet /{sub(/[^0-9]*/,""); print $1}''

  • Tenga en cuenta que la parte de impresión al final - cambia de $ 2 a $ 1 .

Usando Perl Regex:

ifconfig eth0 | grep -oP ''(?<= inet addr:)[^ ]+''

Explicación: grep -oP busca una coincidencia EXACTA usando Perl regex.
La parte "engañosa" es la expresión regular en sí misma;
1. (?<= inet addr:) significa que la cadena inet addr: está a la IZQUIERDA de lo que estamos buscando.
2. [^ ]+ (observe el espacio después del ^) - significa buscar todo hasta el primer espacio en blanco - en nuestro caso es la dirección IP.


Ambos el siguiente trabajo aquí (CentOS 5).

ip addr show eth0 | awk ''$1 == "inet" {gsub(///.*$/, "", $2); print $2}'' ifconfig eth0 | awk ''/inet addr/ {gsub("addr:", "", $2); print $2}''

Para OS X ( v10.11 (El Capitan) al menos):

ifconfig en0 | awk ''$1 == "inet" {print $2}''


Bueno, después de horas de luchar finalmente lo hice bien:

ifconfig en1 | awk ''{ print $2}'' | grep -E -o "([0-9]{1,3}[/.]){3}[0-9]{1,3}"

La última parte que me faltaba era simplemente un patrón de direcciones IP de mi lista.


En caso de eth0, lo siguiente funciona para mí. Intenta ajustarlo con la misma lógica.

ifconfig eth0 | grep ''inet addr:'' | cut -d: -f2 | awk ''{ print $1}''


Este código genera direcciones IP para todas las conexiones de red (excepto loopback) y es portátil entre la mayoría de las versiones de OS X y Linux .

Es particularmente útil para scripts que se ejecutan en máquinas donde:

  • El adaptador de red activo es desconocido,
  • portátiles que cambian entre Wi-Fi y conexiones Ethernet, y
  • máquinas con múltiples conexiones de red.

El script es:

/sbin/ifconfig -a | awk ''/(cast)/ {print $2}'' | cut -d: -f2

Esto se puede asignar a una variable en un script como este:

myip=$(/sbin/ifconfig -a | awk ''/(cast)/ {print $2}'' | cut -d: -f2)

Los scripts pueden manejar posibles direcciones múltiples usando un bucle para procesar los resultados, así:

if [[ -n $myip ]]; then count=0 for i in $myip; do myips[count]=$i # Or process as desired ((++count)) done numIPaddresses=$count # Optional parameter, if wanted fi

Notas:

  • Filtra ''ifconfig'' en "cast", ya que tiene el efecto adicional de filtrar direcciones de bucle invertido y también funciona en la mayoría de las versiones de OS X y Linux.
  • La función final de ''corte'' es necesaria para una función adecuada en Linux, pero no para OS X. Sin embargo, no afecta los resultados de OS X, por lo que queda para la portabilidad.

Más simple:

hostname -I|cut -d" " -f 1 192.168.1.6

¿Qué dispositivo es?

Si no sabe si es eth0, eth1, enp0s23 o wpxxx, puede usar el comando hostname y descubrir qué dispositivo lo tiene:

ip a | awk ''BEGIN{ "hostname -I|cut -d/" /" -f 1" | getline ip} $2 ~ ip {print "Device: "$NF " IP: "$2}'' 192.168.3.5

¿Dirección IP de red?

Ahora, realmente, si quieres la dirección IP de tu red, puedes hacer algo como esto:

wget -q -O /dev/stdout http://checkip.dyndns.org/ | cut -d":" -f2 | cut -d /< -f1 49.21.123.14


Puede usar awk para hacer tanto la selección de la línea de entrada como el análisis sintáctico de la dirección IP de esta manera:

$ ip addr ls docker0 | awk ''/inet / {print $2}'' | cut -d"/" -f1 172.17.42.1

En el ejemplo anterior, sustituya el identificador eth0 del dispositivo por docker0 . Además, si desea una implementación pura de AWK , puede hacer el "corte" dentro de la siguiente manera:

$ ip addr ls docker0 | awk ''/inet / {split($2, ary, ////); print ary[1]}'' 172.17.42.1


Un simple ejemplo de script AWK + Bash que puede dar una idea general de cómo analizar el resultado del comando y mezclar sintaxis.

El código completo está en: https://gist.github.com/darkphase/67d7ec22d47dbebd329e

BEGIN { RS = "" ; FS = "/n" } # Change separator characters { while ( "''"$cmd"''" | getline ){ # print $0 if ( $1 !~ /LOOPBACK/ ){ split($1,arr," ") print "''"$blue"''"arr[1]"''"$reset"''" for(i = 1; i <= NF; i++) { # Loop through fields (this case lines) split($i,arr," ") switch ( arr[1] ) { case "inet": print "''"$red"''" "IPV4:" "''"$reset"''" "/n IP: " "''"$yellow"''" arr[2] "''"$reset"''" "/n NM: "arr[4]"/n BC: "arr[6] break case "inet6": print "''"$red"''" "IPV6:" "''"$reset"''" "/n IP: "arr[2]"/n PL: "arr[4] break case "ether": print "''"$red"''" "MAC: " "''"$reset"''" arr[2] break default: } } print "" } } }''


Utilizar:

ifconfig enops3 | greb broadcast | cut -d " " -f10

Donde enops3 es el nombre de la interfaz.


Después de probar algunas soluciones, considero que esta es la más útil, agréguela a su alias:

alias iconfig=''ifconfig | awk ''/'''{if ( $1 >= "en" && $2 >= "flags" && $3 == "mtu") {print $1}; if ( $1 == "inet" || $1 == "status:"){print $0};}''/'''|egrep "en|lo|inet"''

la salida se ve así:

shady@Shadys-MacBook-Pro:xxxx/xxx ‹dev*›$ iconfig lo0: inet 127.0.0.1 netmask 0xff000000 en0: inet 10.16.27.115 netmask 0xffffff00 broadcast 10.16.27.255 en1: en2: en5: inet 192.168.2.196 netmask 0xffffff00 broadcast 192.168.2.255


Esta es la forma más "agnóstica " de obtener la dirección IP, independientemente de su sistema * nix (Mac OS, Linux), nombre de la interfaz e incluso su configuración de configuración regional:

ifconfig | grep -E "([0-9]{1,3}/.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk ''{ print $2 }'' | cut -f2 -d:

Si tiene más de una dirección IP activa, listará cada una en una línea separada. Si solo desea la primera IP, agregue | head -n1 | head -n1 a la expresión:

ifconfig | grep -E "([0-9]{1,3}/.){3}[0-9]{1,3}" / | grep -v 127.0.0.1 | awk ''{ print $2 }'' | cut -f2 -d: | head -n1

Y si desea la dirección IP de una interfaz específica, reemplace la primera expresión ifconfig por ifconfig INTERFACENAME , por ejemplo ifconfig eth0 | grep -E ... ifconfig eth0 | grep -E ...

Estos son algunos ejemplos mencionados en esta página que fallan en algunas circunstancias y por qué:

  • ip route ... : el comando ip no está instalado en las máquinas OSX.
  • hostname -I : la opción -I no es válida en OSX.
  • ifconfig en0 ... : los nombres de las interfaces ( eth0 , en0 ) son diferentes en Linux y OSX, y en Linux el nombre depende también del tipo de interfaz ( ethX para conexión ethernet, wlanX para inalámbrico, etc.).
  • python -c ''import socket; print(socket.gethostbyname(socket.gethostname()))'' python -c ''import socket; print(socket.gethostbyname(socket.gethostname()))'' : esto me consiguió 127.0.1.1 (una IP loopback ) en Ubuntu Linux 14.04, por lo que no funciona.
  • ifconfig | grep ''inet addr:'' | grep -v 127.0.0.1 | head -n1 | cut -f2 -d: | cut -f1 -d '' '' ifconfig | grep ''inet addr:'' | grep -v 127.0.0.1 | head -n1 | cut -f2 -d: | cut -f1 -d '' '' : la publicación de Geograph es la más cercana, pero no funciona en algunas distribuciones de Linux sin LANG=en configurada, porque el texto inet addr: que grep busca se imprime con un texto diferente en otras configuraciones regionales , y en Mac OS esa etiqueta también es diferente.

también puedes probar esto

user@linux:~$ cat script.sh ifconfig | grep ad.*Bc | cut -d: -f2 | awk ''{ print $1}'' user@linux:~$

Salida

user@linux:~$ ./script.sh 192.168.1.1 10.0.1.1 user@linux:~$

Tenga en cuenta que la salida ifconfig puede ser diferente dependiendo de su versión de Linux. Por lo tanto, es posible que desee cambiar la secuencia de comandos en consecuencia.

Por cierto, esta es mi salida ifconfig

user@linux:~$ ifconfig eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:10 inet addr:192.168.1.1 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:112 errors:0 dropped:0 overruns:0 frame:0 TX packets:93 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14616 (14.2 KiB) TX bytes:17776 (17.3 KiB) eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:11 inet addr:10.0.1.1 Bcast:10.0.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) user@linux:~$