Script en bash o php para notificar cambios IP privada

Discusión general sobre Raspberry Pi
Responder
CarlosLSev
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 29 Dic 2020, 15:41
Agradecido: 0
Agradecimiento recibido: 0

Hola estoy intentando con un script que me notifique por Telegram cada vez que cambie la IP, con la ip publica no hay problema. Con la privada no soy capaz


#!/bin/bash
mensaje="La ip publica es $(curl fconfig.me) el $(date) Saludos..."
TOKEN="xx"
ID="xx"
URL="https://api.telegram.org/bot$TOKEN/sendMessage"
NOWIPADDR="/home/pi/script/ip.txt"
GETIPADDR="ifconfig.me"
timestamp=$( date +%T )
curDate=$( date +"%d-%m-%y" )
LOG="/home/pi/script/ip.log"

if [ -f $NOWIPADDR ]
then
if [ `cat $NOWIPADDR` = `curl $GETIPADDR` ]
then
echo "No hay cambios."
else
curl $GETIPADDR > $NOWIPADDR
echo $curDate $timestamp " IP publica: " $(< $NOWIPADDR) " IP privada " $(hostname -I) >> $LOG
echo "Nueva ip enviando notificacion"
curl -s -X POST $URL -d chat_id=$ID -d text="$mensaje"
fi
else
curl $GETIPADDR >> $NOWIPADDR
fi



En el momento que cambio
GETIPADDR="ifconfig.me"
Por
GETIPADDR="hostname -I"

Y esto es lo de menos por qué funciona siempre
mensaje="La ip privada es $(hostname -I) el $(date) Saludos..."

Alguna forma de modificar el script?

Enviado desde mi M2007J20CG mediante Tapatalk

Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Pero no estás llamando al comando "$GETIPADDR", sino que le estás añadiendo una llamada a curl: "curl $GETIPADDR"
Ahí está el problema.
CarlosLSev
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 29 Dic 2020, 15:41
Agradecido: 0
Agradecimiento recibido: 0

egrueda escribió:Pero no estás llamando al comando "$GETIPADDR", sino que le estás añadiendo una llamada a curl: "curl $GETIPADDR"
Ahí está el problema.
Cómo lo soluciono? No lo acabo de entender..

Enviado desde mi M2007J20CG mediante Tapatalk

Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Cambia la línea:

Código: Seleccionar todo

curl $GETIPADDR > $NOWIPADDR
Por:

Código: Seleccionar todo

$GETIPADDR > $NOWIPADDR
CarlosLSev
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 29 Dic 2020, 15:41
Agradecido: 0
Agradecimiento recibido: 0

egrueda escribió:Cambia la línea:

Código: Seleccionar todo

curl $GETIPADDR > $NOWIPADDR
Por:

Código: Seleccionar todo

$GETIPADDR > $NOWIPADDR
Hola, creo que eso ya lo probé. Lo pruebo y te digo

Enviado desde mi M2007J20CG mediante Tapatalk

Avatar de Usuario
Asirome
Pi Beta
Pi Beta
Mensajes: 126
Registrado: 29 Oct 2018, 15:19
Agradecido: 6 veces
Agradecimiento recibido: 11 veces

También puedes forzar al router que una determinada MAC siempre tenga la misma IP
CarlosLSev
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 29 Dic 2020, 15:41
Agradecido: 0
Agradecimiento recibido: 0

CarlosLSev escribió:
egrueda escribió:Cambia la línea:

Código: Seleccionar todo

curl $GETIPADDR > $NOWIPADDR
Por:

Código: Seleccionar todo

$GETIPADDR > $NOWIPADDR
Hola, creo que eso ya lo probé. Lo pruebo y te digo

Enviado desde mi M2007J20CG mediante Tapatalk
No funciona, cierto es que obtengo la IP privada, pero siempre me envía la notificación como que la IP cambio.

Enviado desde mi M2007J20CG mediante Tapatalk

CarlosLSev
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 29 Dic 2020, 15:41
Agradecido: 0
Agradecimiento recibido: 0

Asirome escribió:También puedes forzar al router que una determinada MAC siempre tenga la misma IP
Hola, ya tengo IP fija en eth0. Necesito saber qué IP tengo en wlan0, ya que le doy wifi por el móvil, y cada vez me crear una IP privada distinta

Enviado desde mi M2007J20CG mediante Tapatalk

Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

CarlosLSev escribió: 30 Sep 2021, 06:56 No funciona, cierto es que obtengo la IP privada, pero siempre me envía la notificación como que la IP cambio.
Vamos por partes.
Quitando el "curl" hemos conseguido que se lea la IP privada, cosa que antes no tenías.
Si quieres obtener la IP privada, no debes usar curl ni en la línea 14 ni en la 18 ni en la 24

Creo que necesitas entender bien tu propio script y entender lo que hace cada comando, como curl

En la línea 14 dice:
if [ `cat $NOWIPADDR` = `$GETIPADDR` ]
Eso, al expandirse cada una de las dos variables, te va a dar un error de sintaxis porque las variables contienen espacios y no estás usando comillas.
Antes te funcionaría porque la salida del comando "curl ifconfig.me" no tiene espacios, pero la de "hostname -I sí los tiene
Tendría que ser así:
if [ "`cat $NOWIPADDR`" = "`$GETIPADDR`" ]
No es lo más elegante ni recomendado, pero es por no cambiar demasiado tu script

Luego en la línea 19 dice:
echo $curDate $timestamp " IP publica: " $(< $NOWIPADDR) " IP privada " $(hostname -I) >> $LOG
Ahí usas $NOWIPADDR para mostrar la IP pública, pero lo que tienes en $NOWIPADDR es la IP privada que has sacado con el comando "hostname -I"

A ver si con estas pistas puedes avanzar.
CarlosLSev
Pi Alpha
Pi Alpha
Mensajes: 17
Registrado: 29 Dic 2020, 15:41
Agradecido: 0
Agradecimiento recibido: 0

Mil gracias, lo de quitar los curl ya lo había probado, pero no se me ocurrió lo de las comillas.
Lo de la linea 19 no me preocupa es para crear un log, ya lo modificaré.
Funciona perfecto, gracias

Enviado desde mi M2007J20CG mediante Tapatalk


Responder