[Bash] Script que loggea tu IP publica.

Iniciado por xianur0n, Enero 18, 2016, 03:16:39 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Enero 18, 2016, 03:16:39 PM Ultima modificación: Enero 18, 2016, 09:32:55 PM por EPSILON
Bueno hacen unos dias me estuve preguntando por curiosidad que cada tiempo mi ip publica cambia. Entonce decidí escribir un script que loggeara mi ip publica en un archivo de texto y escriba en el archivo cuando la ip cambie y la nueva ip. la primera vez que el script corre pues mostrara texto en el standard output que es la pantalla. pero la segunda y las consecuentes veces si el archivo no a cambiado el script correrá de casi manera no interactiva chekeara si la ip cambio si no escribe en el archivo la ip con la fecha de cuando corrió y si la ip cambio comoquiera escribirá en el archivo que la ip a cambiado y nos loggeara la nueva ip. lo unico que la fuente de donde saco la ip no es muy confiable si saben de alguna mejor por favor dejarme saber. el script es perfecto para correrlo una vez y después crear una linea en el crontab para que el script corra una vez al dia sin ninguna interacción con el usuario.

Código: bash

#!/bin/bash

##Sencillo script que permite loggear la ip publica detras de una coneccion normal al internet
##o mediante un vpn. El scrip guarda la informacion en el archivo donde se loggearan las ip en la variable filedir. Sientanse
##a gustos de modificar la variable a donde quieran guardar el archivo con las ip. Si modifican la
##variable no olviden de especificar la ruta completa + el nombre del archivo como lo quieran llamar,
##sino bash dara un error por que no puede redireccionar output a un directorio. El scrip obtendra
##ls IP publica mediante el comando curl, y desde el website www.ipecho.net/plain. Si saben de
##otra forma mas segura para conseguir la IP por favor dejarme saber. El script esta escrito
##de manera que sea facil correrlo al encender el computador y pueda corren en el background. Si
##el archivo ya existe y el script es corrido, el script buscara en la ultima ip loggeada en el
##archivo y y la compara con la IP que este tengamos en el comento de correr el script. Si
##las ip no son iguales. El script loggeara algo dejandonos saber que la ip a cambiado. y escribira
##en el archivo la nueva IP.
## ESCRITO POR:xianur0n

#Ruta al archivo donde se loggearan las IP
filedir=~/privateip.list

#Si el script es corrido sin parametros y el archivo no
#existe entonces mostrara en pantalla informacion
if [[ -z "$1" ]]; then
   if [[ ! -f "$filedir" ]]; then
   echo -e "$filedir no existe, creandolo..... "   
   echo "Creando File"
   echo ".............."
   fi
#Si el Script es corrido con parametros nos muestra
#como se debe de usar y termina.
elif [[ -n "$1" ]]; then
   echo "USAGE:./scriptname"                       
   exit 100
else
   true;
fi
#Guarda ip en variable
privateip=$(curl -s http://ipecho.net/plain)

#Chekea que el Archivo exista
#encaso de que archivo exista, Chekea la ip
#Obtine ultima IP loggeada en archivo para comparacion
#Compara IP en archivo y IP actual
#Si IP no son iguales escribe ls IP en el Archivo
if [[ -f "$filedir" ]]; then
varip=$(curl -s http://ipecho.net/plain)
fileip=$(tail -1 privateip.list | awk '{print $7}')
if [[ "$varip" != "$fileip" ]]; then
  echo -e "TU IP A CAMBIADO!!!!!!!!" >> $filedir
  echo -e "`date`                        $varip" >> $filedir
else
  echo -e "`date`                        $varip" >> $filedir
fi
fi
#si el archivo no existe crea el formato del archivo.
#y escribe por primera vez la IP publica al momento de correr el script.
if [[ ! -f "$filedir" ]]; then
  echo -e "Date                                                IP" >> $filedir
  echo -e "`date`                        $privateip" >> $filedir
fi

exit 0

Enero 21, 2020, 01:04:54 AM #1 Ultima modificación: Enero 21, 2020, 02:17:07 AM por zelen3
Ah que curioso yo ando haciendo lo mismo, me encontré tu script y me ayudo a entender un poco mejor lo que yo quería hacer jaja solo que me sucede algo raro al que hice yo, por tiempos funciona y por tiempos no xD 

Código: php

#!/bin/bash

# Date: 20/01/2020 - 21:14 #
# Autor: zelen3 #
# Descripcion: #
# Script que te muestra tu ip publica y te da un registros
# de solo las veces que esta ha cambiado
# la info es sacada de la web https://canyouseeme.org


# PD: los archivos se guardan en el directorio temporal del sistema "/tmp"
# pero puedes modificarlos para que se guarden en cualquier otro directirio
# solo cambias "/tmp/" por la ruta donde los vayas a guardar

# Variables #

ipNew=/tmp/ip
ipReg=/tmp/ipReg
ipAnt=/tmp/ipAnt

# Comprueba si existe el archivo "ipNew", si no existe,
# crea un nuevo archivo "ipNew", un nuevo archivo
# para registro de ip's cambiadas"ipReg"
# y un nuevo archivo para comparar la ip anterior con la nueva ip

# Si existe el archivo "ipNew" lo sobre escribe con una nueva ip
# y sobreescribe el archivo "ipAnt" agarrando la anterior ip
# desde los registros de "ipReg"

if [[ -e $ipNew ]];then

$(curl -s https://canyouseeme.org | grep 'id="ip"' | cut -b 55-68 >$ipNew)
echo
echo
echo
$(cat $ipReg | tail -n1>$ipAnt)

else

$(curl -s https://canyouseeme.org | grep 'id="ip"' | cut -b 55-68 >$ipNew)
echo
echo
echo
$(date >>$ipReg | cat $ipNew >>$ipReg)
$(cat $ipReg | tail -n1>$ipAnt)
# echo "Su ip publica es: $(cat $ipNew)"

fi

# Compara si "ipNew" e "ipAnt" tinene la misma direccion ip
# si el resultado es que son iguales da 0, si no 1

# (0)si son iguales muestra nada mas la ip sin cambios
# (1)si son diferentes muestra la nueva ip y el registro de cambios

$(diff -q $ipNew $ipAnt >/dev/null)
compValue=$?
if [[ $compValue -eq 1 ]]; then

$(date >>$ipReg | cat $ipNew >>$ipReg)
echo
echo
echo "Su nueva ip publica es: $(cat $ipNew)"
echo
echo "Este es el registro de las ip:"
echo "$(cat $ipReg) "
else

echo "Su ip publica es: $(cat $ipNew)"
fi


# PD: por alguna extranha razon aveces tiende a buggearse
# y comienza a sacar al revez el registro de ip :c [color=black][/color]


btw muchas gracias por publicar tu script :)


podeis ir más allá y hacer que el aviso de cambio sea por email ;-)