Cómo saber tu IP pública con un solo comando

Cómo en una sola línea, podemos conocer nuestra IP pública (IP real), pero además invita a cualquiera que desee mejorar la línea a hacerlo … y bueno… saben que soy un gran fan de bash, por lo que hice algún que otro cambio. Esta es mi línea:

GET http://www.vermiip.es/  | grep "Tu IP p&uacute;blica es" | cut -d ':' -f2 | cut -d '<' -f1

Veamos un screenshot del resultado que obtenemos con mis cambios:

La línea de él es la siguiente:

GET http://www.vermiip.es/ | grep "Tu IP pública es" | perl -pe 's/(.*:)||\s+//g;'

Y cómo se vería usando la línea original:

La explicación del comando original

  1. El comando GET está en cualquier distro GNU/Linux y como su propio nombre indica nos descarga un HTML dada una URL.
  2. El siguiente  paso es observar el documento HTML para ver que IP estás nos muestra  la página. En este segundo paso obtenemos este resultado: <h2>Tu IP p&uacute;blica es: xx.xx.xxx.xxx</h2>, donde obviamente los X son números.
  3. El siguiente paso utilizaré expresiones regulares y PERL como una orden de consola, filtrando las letras, etc perl -pe ‘s/(.*:)|(<\/h2>)|(\s+)//g; , esta regex está realizada  un poco a la ligera propongo mejorarla o incluso usando grep un poco mejor se puede sacar.

Y aquí dejo yo la explicación del mío:

  1. Mediante GET descargamos el HTML de esa URL, que nos dice la IP nuestra y además montón de texto más que no deseamos.
  2. Limpiaremos todo ese código no deseado, dejando solamente la línea de la IP mediante grep.
  3. El problema está en que nos muestra la IP con un pequeño texto y tags H2, por eso ahora usando dos veces cut limpiaremos todo y solo dejaremos la IP.
  4. (1er cut) » Limpiamos el texto y el 1er tag H2 simplemente diciendo que no muestre nada que esté desde los : (dos puntos) hacia su izquierda, quedándonos solamente al final un tag H2.
  5. (1er cut) » Limpiamos este último tag H2 con el otro cut, que no mostrará nada desde el primer < hacia su derecha. Quedándonos solo la IP.

Cualquier método (comando) que usen les dará el mismo resultado, yo simplemente quise hacer mi aporte, pues al ver la línea de comando con expresiones regulares y perl, se haría complejo explicar caracter por caracter a otros jaja.

Fuente