Raspberry Pi – Web server casalingo con ip dinamico

Uno degli utilizzi più comuni di Raspberry Pi è senza dubbio quello di utilizzarlo come Web Server casalingo, per ospitare e testare i propri progetti Web in fase di sviluppo. Nel mio caso il progetto Web in questione è legato alla domotica e mira a controllare diverse cose di casa a distanza tramite il Web.

Fin qui tutto bellissimo ma ovviamente perchè il progetto abbia senso è necessario che vi sia la possibilità di accedere alle pagine ospitate sul nostro server Web da qualsiasi punto noi ci troviamo, non solo all’interno della casa. Per fare ciò è necessario aprire  la porta che il nostro Web server apache utilizza (di default è la porta 80).

Una volta aperto il traffico dall’esterno verso il nostro web server ci sarà sufficiente conoscere l’indirizzo ip di casa nostra per accedervi. Da qui nasce però un altro problema: o abbiamo un ip statico fornitoci dal nostro ISP o altrimenti dovremo avere qualcuno che ogni volta ci comunica l’indirizzo Ip. Ebbene con il nostro Raspberry (ma in realtà con qualsiasi altro web server basato su linux) possiamo risolvere il problema. Vediamo come .. 

Sarà sufficiente scrivere uno script python che verifica ogni x minuti o ore l’indirizzo ip e in caso che questo sia variato ci avvisa tramite mail. Vi basterà avere un account gmail e impostare lo script ogni x minuti tramite Crontab ( http://www.adminschoice.com/crontab-quick-reference )

In questo modo è come se avessimo un ip statico dato che siamo sempre informati sulle sue variazioni. Vi sono anche dei servizi che forniscono in automatico lo stesso servizio mantenendo un dns sempre fisso ma non avendo trovato nessun servizio gratuito e valido ho optato per questa soluzione.

Magari potrà tornare utile anche a qualcunaltro.

Vi copio di seguito lo script che ho realizzato:

#!/usr/bin/env python2.7
import urllib2
import MySQLdb as mdb
import sys
con = mdb.connect('localhost', 'username', 'pass', 'Database');

#import MySQLdb
import smtplib, string, subprocess

# Settings
fromaddr = 'yourmail@gmail.com'
toaddr = 'yourmailordestinatary@gmail.com'

# Googlemail login details
username = 'yourusername'
password = 'yourpass'

output_if = subprocess.Popen(['ifconfig'], stdout=subprocess.PIPE).communicate()[0]
output_cpu = open('/proc/cpuinfo', 'r').read()
my_ip = urllib2.urlopen('http://ip.42.pl/raw').read()

with con:

cur = con.cursor()
cur.execute("SELECT Ip FROM Tabledb")
ip= cur.fetchone()

print ip[0]

if my_ip == ip[0]:

print 'uguale'

else:

with con:

cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS Tabledb")
cur.execute("CREATE TABLE Tabledb(Id INT PRIMARY KEY AUTO_INCREMENT, \
Name VARCHAR(25), Ip TEXT, Time TIMESTAMP)")
cur.execute("INSERT INTO Srv(Ip) VALUES('%s')" %(my_ip))
print my_ip

BODY = string.join((

"From: %s" % fromaddr,
"To: %s" % toaddr,
"Subject: Indirizzo Ip Server variato",
"",
"http://%s" % my_ip,
), "\r\n")
# send the email
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddr, BODY)
server.quit()

Annunci
Contrassegnato da tag , , , , , , ,

3 thoughts on “Raspberry Pi – Web server casalingo con ip dinamico

  1. Giovanni ha detto:

    Non ho python2.7 e si blocca, ho provato a mettere python2.6 alla prima riga e mi da errore alla riga cur=cron.cursor. Cosa posso fare?

  2. giovanealpino ha detto:

    ho difficoltà nel farlo funzionare.
    potrebbe darmi dei suggerimenti per cortesia ?
    ——————-
    pi@raspy:/home/pi/paolo$ ./my_ip3.py
    Traceback (most recent call last):
    File “./my_ip3.py”, line 31, in
    print ip[0]
    TypeError: ‘NoneType’ object has no attribute ‘__getitem__’
    pi@raspy:/home/pi/paolo$
    ———————

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: