# [script] ayuda con script

## Theasker

En este artículo proponen enviar por consola un correo con la ip pública del router para poder conectarte desde otro sitio, pero no consigo hacerlo funcionar, no se muy bien q nombre poner al script y si tienen q ser varios scripts o todo en uno. Bueno el correo me lo envía pero me da error del script

```
/etc/scripts/enviarip.sh: /etc/scripts/tomar_ipext.exp: /etc/script/expect: bad interpreter: No existe el fichero o el directorio

Aug 15 23:31:00 theasker sendEmail[5243]: Email was sent successfully! 
```

----------

## Inodoro_Pereyra

Parece que te falta instalar dev-perl/Expect mi amigo.

De todas formas, no sería mas eficaz (y mas seguro) usar algo como Hamachi por ejemplo? - Está en portage.

Salud!

----------

## Theasker

no entiendo muy bien el quÃ© es y quÃ© hace

----------

## ps2

hamachi no es una opción. La gracia es hacer un script que funcione y además sea usando software de código abierto. Por lo menos esa es mi humilde opinión si yo fuera el interesado.

----------

## Theasker

pues echarme un cable q no explica muy bien en el artÃ­culo como hacerlo, xq no se si son 2 scripts, uno q llama al otro o es todo en uno aunque no lo ha escrito, no se muy bien como hacerlo y este script me vendrÃ­a genial, xq ademÃ¡s aun no he usado el cron y serÃ­a una forma de empezar.

Gracias anticipadas

----------

## pcmaster

Si lo que quieres es saber la IP pública de tu PC para conectarte a él, ¿no es más fácil usar un dominio dinámico como dyndns o no-ip?

Algunos routers incluso incorporan el cliente para actualizar la IP en el servidor ellos solitos.

----------

## Theasker

ya, ya uso dyndns pero querÃ­a hacerlo tambiÃ©n asÃ­, mÃ¡s por aprender q por otra cosa, y de todas formas cada vez q me cambia la ip, tengo q entrar en mi cuenta de dyndns y actualizar la ip, sino no me funciona y para no tener q hacer eso o si no estoy delante de mi ordenador o estoy en el curro y ha cambiado la ip pues tengo eso porsiaca, y la otra razÃ³n q es mÃ¡s ... de peso es por aprender que soy demasiado nobato y tengo ganas de aprender mÃ¡s linux  :Very Happy: .

----------

## ps2

Hay un comando, no recuerdo ahora cual, que está basado en python con el que actualizas tu dyndns desde tu PC. El tema está en que lo puedes poner en el cron cada "x" tiempo que tu consideres oportuno. Yo estube usando eso durante bastante tiempo hasta que adquirí un router linksys, el cual tiene soporte directamente para eso.

----------

## i92guboj

 *ps2 wrote:*   

> Hay un comando, no recuerdo ahora cual, que está basado en python con el que actualizas tu dyndns desde tu PC. El tema está en que lo puedes poner en el cron cada "x" tiempo que tu consideres oportuno. Yo estube usando eso durante bastante tiempo hasta que adquirí un router linksys, el cual tiene soporte directamente para eso.

 

ddclient puede hacer eso. Hay más clientes para lo mismo, pero ahora no recuerdo otro.

----------

## jgascon

Hola, Theasker, este script lo uso en mi router para que me mande un mail y cambie lar reglas del firewall si me cambia la IP. Cambia el valor de las variables y quita lo del firewall. 

```

#!/bin/bash

############## UTILS ####################################################

SENDEMAIL=/etc/scripts/mail.sh

IFCONFIG=/sbin/ifconfig

GREP=/bin/grep

CAT=/bin/cat

AWK=/bin/awk

CUT=/bin/cut

DATE=/bin/date

ECHO=/bin/echo

FW=/etc/scripts/firewall.sh

############### FILES ####################################################

IPFILE=/etc/scripts/.if-$1

CURRENTIP=$($IFCONFIG $1 | $GREP addr: | $AWK '{print $2}' | $CUT -d: -f2)

if [ $# -ne 1 ]; then

  $ECHO "usage: getip.sh interface"

  exit 1

fi

if [ ! -e $IPFILE ]; then

  $ECHO $CURRENTIP > $IPFILE

fi

IP=$($CAT $IPFILE)

if [ $CURRENTIP != $IP ]; then

  $ECHO $CURRENTIP > $IPFILE

  $FW

  $SENDEMAIL -s "IP change $($DATE)" -a $IPFILE

fi

# die gracefully

exit 0

```

----------

## Theasker

CÃ³mo es /etc/scripts/mail.sh ?

----------

## jgascon

 *Theasker wrote:*   

> Cómo es /etc/scripts/mail.sh ?

 

Es el script que uso con sendEmail. No sé si al final te hiciste uno tú tambien, te pego el mío por si acaso.

```

#!/bin/bash

SE=/usr/bin/sendEmail

TOMAIL=                              # Dirección desde dónde se envía el mail

MAIL=                                  # Direccion adonde se envía el mail  

MAILSERVER=smtp.gmail.com:587

MAILUSER=                           # Usuario de la cuenta de $TOMAIL

PASS=                                  # Contraseña del usuairo de la cuenta de $TOMAIL

while getopts s:a:m: OPTIONS; do

  case "$OPTIONS" in

    s) SUBJECT=$OPTARG;;

    a) ATTACHMENT=$OPTARG;;

    m) MESSAGE=$OPTARG;;

  esac

done

if [ ! -z "$MESSAGE" ]; then

  $SE -t $TOMAIL -f $MAIL -s $MAILSERVER -xu $MAILUSER -xp $PASS -o tls=yes -u "$SUBJECT" -m "$MESSAGE"

else

  $SE -t $TOMAIL -f $MAIL -s $MAILSERVER -xu $MAILUSER -xp $PASS -o tls=yes -u "$SUBJECT" -o message-file="$ATTACHMENT"

fi

# die gracefully

exit 0

```

En este script uso dos cuentas de gmail porque al estar la contraseña de una de ellas en el script me da un poco de mal rollo, pero puedes usar una sola cuenta de gmail. $TOMAIL a la dirección que se envía el mail y $MAIL la dirección desde donde se envía.

Por último, también debes añadir una tarea de cron que ejecute el script. En mi caso, tengo la siguiente línea en /etc/crontab

```

*/15 * * * * root /etc/scripts/getip.sh eth1

```

De esta forma se ejecuta el script/etc/scripts/getip.sh (el del post anterior) cada cada 15 minutos sobre la interfaz eth1.

----------

## aralion

Perdonad mi ignorancia, cabria la posibilidad de ejecutar los mismos scripts pero para sendmail?, es decir los mismos parametros que se le pasa a sendEmail serian los mismos para sendmail?, es que el router de un amigo lleva una debian y al pobre bicho no le puedo poner una gentoo :S.

Saludos y gracias.

----------

## pcmaster

La gracia de dyndns noes que entres tu y le cambies la IP, sino que lo haga automáticamente. Y no de forma periodica con el cron, sino cuando cambia la IP (en la propia web te indica las reglas a seguir).

Si tu router no lleva el cliente instalado para hacer la actualización de IP, puedes instalar uno en un PC de tu red.

Los scripts que usáis emplean ifconfig para obtener la IP, por lo tanto estáis obterniendo la IP privada del pc donde se ejecuta, no la IP pública de Internet.

Para obtener la IP pública del router, echad un vistazo a mi programa de monitorización de routers en este hilo:

https://forums.gentoo.org/viewtopic-t-574118.html

----------

## Theasker

pero eso no es para todos los routers no?

----------

## jgascon

 *pcmaster wrote:*   

> 
> 
> Los scripts que usáis emplean ifconfig para obtener la IP, por lo tanto estáis obterniendo la IP privada del pc donde se ejecuta, no la IP pública de Internet.
> 
> 

 

El uso de ifconfig no tiene nada que ver, si usas ifconfig en el propio router sobre la interfaz externa te da la IP pública. Ten en cuenta que al menos en mi caso el router (que es una máquina con gentoo) está directamente conectado al cablemodem.

En mi caso, necesitaba saber cuando cambia la IP pública porque las reglas del firewall se basan en parte en IP's además de interfaces y me encontré que cuando me cambiaba la IP (cosa que pasa muy raras veces) no podía acceder a Internet desde los pc's que están detrás del router. 

En casos que estás dando un servicio hacia afuera al que alguien se tenga que conectar (aunque sólo sea ssh) igual sí es más aconsejable usar dyndns.

 *aralion wrote:*   

> 
> 
> Perdonad mi ignorancia, cabria la posibilidad de ejecutar los mismos scripts pero para sendmail?, es decir los mismos parametros que se le pasa a sendEmail serian los mismos para sendmail?, es que el router de un amigo lleva una debian y al pobre bicho no le puedo poner una gentoo :S. 
> 
> 

 

Si tienes correctamente configurado sendmail para que envíe mails al exterior supongo que sí, sólo tienes que adaptar el script para que use las opciones que usas con sendmail.

----------

## pcmaster

 *jgascon wrote:*   

>  *pcmaster wrote:*   
> 
> Los scripts que usáis emplean ifconfig para obtener la IP, por lo tanto estáis obterniendo la IP privada del pc donde se ejecuta, no la IP pública de Internet.
> 
>  
> ...

 

Desde luego, pensé que usabas un router independiente, como los que proporcionan los ISP, o uno comprado aparte y conectado al cablemódem.

----------

