Spiga

Saber la IP de red y pública con un solo comando (+Script)

Esta semana que acaba ha sido un poco caótica en el trabajo, aparte del traslado de oficina, muebles para arriba, muebles para abajo, se ha pulverizado el servidor de archivos del trabajo (montado sobre una KKRAID) con todos los problemas que conlleva (copias de seguridad desactualizadas, posteriores problemas con la controladora y los discos SCSI... todo un show), accesos remotos a clientes que te vuelven loco tanto pedir (y contradecirse cada 15 minutos), la web de un cliente que por arte de magia "ha perdido" parte de la base de datos... Total, que para relajarme este fin de semana he decidido crearme un sistema de copias que lanzare desde mi casa con el que me ahorrare problemas futuros. En un principio lo programaré en MONO y algo de script bajo shell.

Necesario tener instalado:

  • ifconfig
  • grep
  • cut
  • awk
  • wget
Lo primero que he pensado es que necesitare la ip de red del nuestro PC (solo y exclusivamente la IP, sin ningún dato más). En este caso usaremos el comando ifconfig, buscando con grep los patrones que nos interesan, seleccionamos y eliminamos lo sobrente y mostramos el resto:

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

En el segundo caso usaremos wget que ira a buscar la ip a dyndns.org, y la mostrara limpita de código sobrante:

$ wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address:
//' -e 's/<.*$//'

Ahora bien, si queremos usar un script, que podemos por ejemplo ejecutar con un lanzador, cada vez que queramos, abrimos nuestro editor de texto preferido, copiamos el siguiente texto y lo pegamos en el editor.

#!/bin/sh
clear
echo "IP de red: "
exec ifconfig | grep 'inet:'| grep -v '127.0.0.1' | cut -d: -f2 |
awk '{print $1}'
echo "IP pública: "
exec wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address:
//' -e 's/<.*$//'

Guardamos, cerramos y le damos permisos de ejecución con CHMOD, y lo ejecutamos (en mi caso el script se llama mostrarip);

$ sudo chmod +xr mostrarip

$ ./mostrarip

IP de red :
192.168.0.69
IP pública :
77.143.xxx.xxx

Seguro que al final paso de hacer nada, y dejo esto del programa para otro "día"... pero la intención es lo que cuenta, no? :P

Fuentes: ip de red || ip pública

3 comentarios:

  Luciano Lagassa

17 de abril de 2010, 5:25

hola, modifique tu script, le agregue un escaneo de puertos con nmap, aca va el codigo.

#!/bin/sh
PrivateIP=`ifconfig | grep 'inet:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'`
PrivatePorts=`nmap -PA21,22,80,443 $PrivateIP`
echo "IP Privada:"$PrivateIP
echo " Estado de Puertos:"
if [ -n "`echo $PrivatePorts | grep -i 21/tcp`" ]
then
echo " * FTP [Abierto]"
else
echo " * FTP [Cerrado]"
fi
if [ -n "`echo $PrivatePorts | grep -i 22/tcp`" ]
then
echo " * SSH [Abierto]"
else
echo " * SSH [Cerrado]"
fi
if [ -n "`echo $PrivatePorts | grep -i 80/tcp`" ]
then
echo " * HTTP [Abierto]"
else
echo " * HTTP [Cerrado]"
fi
if [ -n "`echo $PrivatePorts | grep -i 443/tcp`" ]
then
echo " * HTTPS [Abierto]"
else
echo " * HTTPS [Cerrado]"
fi
PublicIP=`wget -q -O - checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
PublicPorts=`nmap -PA21,22,80,443 $PublicIP`
echo "IP Pública:"$PublicIP
echo " Estado de Puertos:"
if [ -n "`echo $PublicPorts | grep -i 21/tcp`" ]
then
echo " * FTP [Abierto]"
else
echo " * FTP [Cerrado]"
fi
if [ -n "`echo $PublicPorts | grep -i 22/tcp`" ]
then
echo " * SSH [Abierto]"
else
echo " * SSH [Cerrado]"
fi
if [ -n "`echo $PublicPorts | grep -i 80/tcp`" ]
then
echo " * HTTP [Abierto]"
else
echo " * HTTP [Cerrado]"
fi
if [ -n "`echo $PublicPorts | grep -i 443/tcp`" ]
then
echo " * HTTPS [Abierto]"
else
echo " * HTTPS [Cerrado]"
fi

  NeoDaVe

17 de abril de 2010, 16:43

Estoy empezando con esto de los Scripts, y aunque he hecho algunos simples me falta mucho para llegar a esto, que una vez lo leo es sencillo y lo entiendo hay que llegar a hacerlo :D

No se por que en Windows se me da mejor la ventana y en Linux la consola.

  Sergio

17 de mayo de 2010, 23:30

Me ha sido muy útil la información.

Lo único, que he probado el script sin porner exec al comienzo de las líneas que citas y funciona igual.

Saludos.