Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.4K
Views
Script bash de Linux para extraer la dirección IP

Quiero hacer un script grande en mi Debian 7.3 (algo así como un entorno traducido y mucho más nuevo y fácil de usar). Tengo un problema. Quiero usar solo algunas de las informaciones que me dan los comandos. Por ejemplo, mi ifconfig se ve así:

 eth0 Link encap:Ethernet HWaddr 08:00:27:a3:e3:b0 inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fea3:e3b0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1904 errors:0 dropped:0 overruns:0 frame:0 TX packets:2002 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1309425 (1.2 MiB) T

Quiero mostrar solo la dirección IP en línea: echo "Su dirección IP es: (IP_ADDRESS)". ¿Hay algún comando que me permita hacer tal cosa, buscar en la corriente la información que quiero obtener? Sé sobre grep y sed , pero no soy muy bueno con ellos.

Editar: En primer lugar, para decir gracias por ayudarme con este problema, ahora sé mucho más. En segundo lugar, decir que el proyecto está en progreso. Si alguien estaría interesado en él, solo mándame un mensaje privado.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si el objetivo es encontrar la dirección IP conectada en dirección a Internet, esta debería ser una buena solución.

Edición 2021: se agregaron versiones "sed" y "grep" y nuevas versiones "awk" (algunas son gnu)


Para encontrar qué sumadores de IP se usan conectados a Internet, podemos usar el comando ip route . Con la versión más nueva de Linux, obtiene más información con un resultado típico como este:

 ip route get 8.8.8.8 8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002 cache

entonces, para obtener la IP , debe encontrar la IP después de src , usando awk , sed o grep

 ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}' ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]' ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1' ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d' ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d' ip route get 8.8.8.8 | sed -nE '1{s/.*?src (\S+) .*/\1/;p}' ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+' 10.36.15.150

y si te gusta el nombre de la interfaz usando awk , sed o grep

 ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}' ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]' ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1' ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d' ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d' ip route get 8.8.8.8 | sed -nE '1{s/.*?dev (\S+) .*/\1/;p}' ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+' ens192

ip route no abre ninguna conexión, solo muestra la ruta necesaria para llegar a 8.8.8.8 . 8.8.8.8 es el DNS de Google.

Si desea almacenar esto en una variable, haga lo siguiente:

 my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}') my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')

Por qué otra solución puede fallar:

ifconfig eth0

  • Si la interfaz que tienes tiene otro nombre (eno1, wifi, venet0 etc)
  • Si tiene más de una interfaz
  • La dirección de conexión IP no es la primera en una lista de más de un IF

Hostname -I

  • Puede obtener solo el 127.0.1.1
  • No funciona en todos los sistemas.
  • Da todas las IP no solo la que está conectada a internet. -I, --all-ip-addresses todas las direcciones del host
over 4 years ago · Santiago Trujillo Report

0

Para obtener su dirección IP:

 echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`

Esto le dará la dirección IP de eth0.

Editar: debido a los cambios de nombre de las interfaces en las versiones recientes de Ubuntu, esto ya no funciona. En su lugar, podrías usar esto:

hostname --all-ip-addresses o hostname -I , que hace lo mismo (te da TODAS las direcciones IP del host).

over 4 years ago · Santiago Trujillo Report

0

Si desea obtener una lista separada por espacios de sus direcciones IP, puede usar el comando de nombre de hostname con el --all-ip-addresses (short -I )

 hostname -I

como se describe aquí: Poner la dirección IP en la variable bash. ¿Hay una mejor manera ?

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!