Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.4K
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda