IPFinder: il mio primo programma in Python + GTK

Scritto da: Andrea Gabbon
Data: 22.12.2008

IPFinder è un programmino scritto da me, per diletto, che mostra il proprio IP di LAN e l’IP con cui si esce in Internet (quello del router tanto per capirci).

IPFinder

Leggendo, come di consueto, le ultime novità dal mondo del’informatica, sono capitato su questo articolo, ed in particolare su questo blog, ed ho detto: “PyGTK, perchè no?” E mi sono messo a sviluppare questo piccolo programma.

Esso è stato creato in linguaggio Python con le librerie grafiche GTK e PyGTK, scritto con Netbeans e disegnato con Glade.

In breve:

  • Python è un linguaggio di programmazione
  • GTK sono delle librerie grafiche (quelle con cui è stato scritto Gnome tanto per capirci)
  • PyGTK sono delle librerie per interfacciare Python e GTK
  • Netbeans è un IDE, ovvero un editor per scrivere codice, e non solo
  • Glade serve per disegnare le interfacce grafiche basate su GTK

Cosa fa questo programma? Mostra l’ip della propria scheda di rete e l’ip che sia visto da Internet.

Ecco il listato di IPFinder.py:

#!/usr/bin/env  python

__author__="ezhno"
__date__ ="$22-dic-2008 18.55.30$"

#if __name__ == "__main__":
#    print "Hello";

# Carico le librerie necessarie

try:
    import gtk
    import gtk.glade
    import pygtk
except:
    print "Devi installare le librerie GTK di Python"

import os.path
import re
import urllib
import socket
import sys

pygtk.require("2.0")

# Funzione che riempie le caselle di testo
def riempi_campi():
    entry1.set_text(get_local_ip())
    entry2.set_text(get_internet_ip())

# Funzione che restituisce l'ip locale
def get_local_ip(remote = ('www.python.org',80)):
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(remote)
    except:
        return "Problema di connessione."
    ip, localport = s.getsockname()
    s.close()
    return ip;

# Funzione che restituisce l'ip internet
def get_internet_ip():
    try:
        f = urllib.urlopen('http://checkip.dyndns.org')
        s = f.read()
    except:
        return "Problema di connessione."
    m = re.search("\d+\.\d+\.\d+\.\d+", s)
    return m.group(0)

# Funzione per non lasciare appeso python quando si chiude la finestra
def on_window1_destroy(widget, data=None):
	gtk.main_quit()

# Funzione per aggiornare le caselle di testo
def on_button1_clicked(widget, data=None):
    riempi_campi()

# Binding tra eventi della parte grafica e le funzioni
segnali = {
  'on_window1_destroy': on_window1_destroy,
  'on_button1_clicked': on_button1_clicked
}

# Caricamento interfaccia grafica
try:
    gladeFile = gtk.glade.XML('/'.join([os.path.dirname(sys.argv[0]), 'IPFinder.glade']))
except:
    print "Impossibile aprire il file 'IPFinder.galde'"
    sys.exit(1)

window1 = gladeFile.get_widget('window1')
entry1 = gladeFile.get_widget('entry1')
entry2 = gladeFile.get_widget('entry2')
button1 = gladeFile.get_widget('button1')

# Prima lettura degli ip
riempi_campi()

# Binding automatico tra eventi della parte grafica e le funzioni
gladeFile.signal_autoconnect(segnali)

# Visualizzazione
if window1:
	window1.show()
	gtk.main()

Lo si scarica da qui.

Estraetelo in una cartella e lanciatelo con:

python IPFinder.py

Lo so, non serve a nulla, è scritto male, ma sono fiero di aver creato un qualcosa con strumenti offerti gratuitamente.