20
2010
(re)connexion automatique à un VPN sous Ubuntu
En ces temps peu glorieux d’Hadopi et tous ses dérivés… un bon moyen de pouvoir surfer sans être espionné, est d’utiliser un VPN.
Pour ma part, j’ai été confronté à des problèmes de déconnexions intempestives, sans reconnexion automatique. Ce qui peut être parfois gênant…
Voilà donc un (bon) moyen de palier ce problème. Ce n’est surement pas la meilleure solution, et je ne suis pas un fou de linux.. mais au moins, elle me satisfait!
Cette solution se compose de 2 fichiers. Un “check_vpn” qui se charge de lancer le script principal à intervalles définis. Et “vpn_restart.py”, script en python qui relance la connexion si celle ci déconnectée.
check_vpn
-
-
while [ 1 ]; do
-
echo -n $(date) "## "
-
sudo /home/bsoft/Bureau/vpn_restart.py #où le script est installé
-
sleep 60 #en secondes, temps de boucle du script
-
done
vpn_restart.py
-
#http://ubuntuforums.org/showthread.php?t=1316314
-
import sys
-
import os
-
import dbus
-
import gobject
-
from dbus.mainloop.glib import DBusGMainLoop
-
-
# The uuid of the VPN connection to activate
-
VPN_CONNECTION_UUID = "20d3d577-51b4-435c-b408-2a3f3c8a5463"
-
-
# The uuid of the connection that needs to be active to start the VPN connection
-
ACTIVE_CONNECTION_UUID = "recupere via get_active_conn(bus)"
-
-
# Mon conn ID
-
CONN_ID = "Auto eth0"
-
# Mon conn['type']
-
CONN_TYPE = "802-3-ethernet"
-
-
# some service, path and interface constants
-
NM_DBUS_SERVICE = "org.freedesktop.NetworkManager"
-
NM_DBUS_PATH = "/org/freedesktop/NetworkManager"
-
NM_DBUS_INTERFACE = "org.freedesktop.NetworkManager"
-
NM_DBUS_IFACE_CONNECTION_ACTIVE = "org.freedesktop.NetworkManager.Connection.Active"
-
NM_DBUS_SERVICE_SYSTEM_SETTINGS = "org.freedesktop.NetworkManagerSystemSettings"
-
NM_DBUS_SERVICE_USER_SETTINGS = "org.freedesktop.NetworkManagerUserSettings"
-
NM_DBUS_IFACE_SETTINGS = "org.freedesktop.NetworkManagerSettings"
-
NM_DBUS_PATH_SETTINGS = "/org/freedesktop/NetworkManagerSettings"
-
NM_DBUS_IFACE_SETTINGS_CONNECTION = "org.freedesktop.NetworkManagerSettings.Connection"
-
-
DBusGMainLoop(set_as_default=True)
-
-
nm_dbus_settings_services = (NM_DBUS_SERVICE_SYSTEM_SETTINGS, NM_DBUS_SERVICE_USER_SETTINGS)
-
-
def get_connections(bus, service):
-
proxy = bus.get_object(service, NM_DBUS_PATH_SETTINGS)
-
iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS)
-
return iface.ListConnections()
-
-
def get_connection_by_uuid(bus, uuid):
-
for service in nm_dbus_settings_services:
-
for c in get_connections(bus, service):
-
proxy = bus.get_object(service, c)
-
iface = dbus.Interface(proxy, dbus_interface = NM_DBUS_IFACE_SETTINGS_CONNECTION)
-
settings = iface.GetSettings()
-
if settings['connection']['uuid'] == uuid:
-
return (c, service)
-
return None
-
-
def list_uuids(bus):
-
for service in nm_dbus_settings_services:
-
for c in get_connections(bus, service):
-
proxy = bus.get_object(service, c)
-
iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION)
-
settings = iface.GetSettings()
-
conn = settings['connection']
-
print "%s: %s – %s (%s)" % (service, conn['uuid'], conn['id'], conn['type'])
-
-
# recupere l'uuid de la connexion active via CONN_ID et CONN_TYPE
-
def get_active_conn(bus):
-
for service in nm_dbus_settings_services:
-
for c in get_connections(bus, service):
-
proxy = bus.get_object(service, c)
-
iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION)
-
settings = iface.GetSettings()
-
conn = settings['connection']
-
if conn['id'] == CONN_ID and conn['type'] == CONN_TYPE:
-
return conn['uuid']
-
-
def get_active_connection_path(bus, uuid):
-
proxy = bus.get_object(NM_DBUS_SERVICE, NM_DBUS_PATH)
-
iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
-
active_connections = iface.Get(NM_DBUS_INTERFACE, 'ActiveConnections')
-
connection_and_service = get_connection_by_uuid(bus, uuid)
-
if connection_and_service == None:
-
return None
-
for a in active_connections:
-
proxy = bus.get_object(NM_DBUS_SERVICE, a)
-
iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
-
path = iface.Get(NM_DBUS_IFACE_CONNECTION_ACTIVE, 'Connection')
-
service = iface.Get(NM_DBUS_IFACE_CONNECTION_ACTIVE, 'ServiceName')
-
if service != connection_and_service[1]:
-
continue
-
proxy = bus.get_object(connection_and_service[1], path)
-
iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION)
-
settings = iface.GetSettings()
-
if settings['connection']['uuid'] == uuid:
-
return a
-
return None
-
-
def activate_connection(bus, vpn_connection, active_connection):
-
def reply_handler(opath):
-
print "<<SUCCESS>>"
-
sys.exit(0)
-
def error_handler(*args):
-
print "<<FAILURE>>"
-
sys.exit(1)
-
proxy = bus.get_object(NM_DBUS_SERVICE, NM_DBUS_PATH)
-
iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_INTERFACE)
-
iface.ActivateConnection(NM_DBUS_SERVICE_USER_SETTINGS,
-
vpn_connection[0],
-
dbus.ObjectPath("/"),
-
active_connection,
-
reply_handler=reply_handler,
-
error_handler=error_handler)
-
-
bus = dbus.SystemBus()
-
-
print "connections:"
-
list_uuids(bus)
-
-
ACTIVE_CONNECTION_UUID = get_active_conn(bus)
-
-
if len(VPN_CONNECTION_UUID) < 1 or len(ACTIVE_CONNECTION_UUID) < 1:
-
print "you need to set the uuids"
-
sys.exit(0)
-
-
vpn_connection = get_connection_by_uuid(bus, VPN_CONNECTION_UUID)
-
if not vpn_connection:
-
print "Configured VPN connection is not known to NM, check VPN_CONNECTION_UUID."
-
sys.exit(1)
-
-
active_connection = get_connection_by_uuid(bus, ACTIVE_CONNECTION_UUID)
-
if not active_connection:
-
print "Configured active connection is not known to NM, check ACTIVE_CONNECTION_UUID."
-
sys.exit(1)
-
-
if get_active_connection_path(bus, VPN_CONNECTION_UUID) != None:
-
print "VPN connection already activated"
-
sys.exit(0)
-
-
active_connection_path = get_active_connection_path(bus, ACTIVE_CONNECTION_UUID)
-
if not active_connection_path:
-
print "The required connection isn't active at the moment"
-
sys.exit(0)
-
-
print "connecting to:\n '%s'\nwith active connection:\n '%s'" % (vpn_connection, active_connection)
-
-
activate_connection(bus, vpn_connection, active_connection_path)
-
-
loop = gobject.MainLoop()
-
loop.run()
Le script python peut très facilement être amélioré. On peut imaginer par exemple de fermer certaines applications lorsque la connexion VPN est morte..
Pour faire fonctionner le tout, il suffit de copier le script python où vous voulez.
Puis, de copier en admin (sudo) le script check_vpn dans /etc/init.d
Il faut le rendre exécutable (chmod u+x nom_du_fichier)
Puis il faut créer un lien symbolique du script dans /etc/rc2.d afin que celui ci démarre automatique avec le système.
ln -s /etc/init.d/check_vpn /etc/rc2.d/S88check_vpn
Et voilà!
Chez moi, sous Ubuntu 9.04, ca fonctionne très bien. Il faut bien entendu au préalable avoir une connexion VPN de configurée dans le network manager.
20
2010
ACTA, ou la censure mondiale d’Internet!!
Après la loi débile Hadopi pour essayer de réguler le piratage (soi disant pour mieux rétribuer Johnny et les potes de Sarko ou de Mme carla..), après bientôt la loi de censure d’internet Loppsi qui sera débattu au parlement début Février (soi disant pour traquer les pédophiles.. On a vu ce que ca donne en Australie)…
Et bien, dans notre dos, à l’insu du plus grand nombre, se trame un projet similaire, mais à l’échelle mondiale!!!
Et au delà des “problèmes” sur le piratage, se pose un vrai débat, celui de la censure mondiale!
Car c’est bien de cela qu’il s’agit! Comment contrôler l’information et surtout sa diffusion. Goebbels l’avait très bien compris il n’y a pas si longtemps.
Internet permet presque de s’affranchir de ces censures, et de diffuser (trop?) rapidement de l’information.. Ce qui n’est pas du goût de tout le monde…
Je vous invite à lire cet article, et si vous voulez en savoir plus, n’hésitez pas à suivre un peu les liens ou faire quelques recherches. Mais surtout, faites circuler l’info!!
http://fr.readwriteweb.com/2010/01/20/a-la-une/traite-acta-censure-loppsi-hadopi/
10
2009
Tutorial HTML 5 et les bases de données embarquées
HTML5 commence à montrer le bout de son nez. Les navigateurs “modernes” dans leurs versions récentes prennent en charge de plus en plus des nouvelles fonctionnalités prévues.
Attention tout de même, HTML5 n’est qu’un brouillon! Une version “draft” du W3C .
Une des nouvelles fonctionnalités, très pratique pour les applis web et autres sites, est la possibilité de pouvoir embarquer une base de données SQLite directement dans la navigateur du client. Sans qu’il soit nécessaire de gérer une base de données en plus de votre site.
Remarque : concernant les bases de données embarquées, la dernière version de Safari (mobile et desktop) semble être celle qui le gère le mieux.
Une document HTML 5 commence par :
<!doctype html>
La base de données se manipule au sein de balises JavaScript.
-
var db; // variable globale pour manipuler la bdd.
-
-
try {
-
if (window.openDatabase) {
-
db = openDatabase("maBaseDeDonnees", "1.0", "Ex de bdd avec HTML5", 200000);
-
if (!db)
-
alert("Impossible d'ouvrir la bdd. Peut être un problème de version ou alors pas assez de quota d'espace disque disponible pour ce domaine.");
-
} else
-
alert("Impossible d'ouvrir la base de données. Merci d'essayer avec un autre navigateur.");
-
} catch(err) { }
La méthode “openDatabase” comprend 4 arguments :
- Le nom de la base. Ce nom sera aussi la référence pour utiliser la base dans le code.
- La version de la base (optionnelle)
- une description
- La taille estimée de la base en octets. (1024 o = 1 ko!)
Pour requêter la base, nous allons utiliser les “transaction” et la méthode “executeSql” :
La méthode “executeSql” prend au minimum un paramètre, à savoir la requête à exécuter.
-
tx.executeSql("select * from mabase where id=?", [56]);
-
}
Le second paramètre, [56], permet de spécifier des valeurs à passer dans la requête à la place des ‘?’.
Pour récupérer les résultats de la requête, la méthode executeSql peut recevoir un 3e paramètre :
-
tx.executeSql("select * from matable where id=?", [56], function(tx, resu){}, function(tx,error){});
-
}
Le 4e paramètre permet quant à lui de gérer les erreurs.
La variable “resu” du 3e paramètre est un objet de type SQLResultSet qui permet ensuite d’accéder aux résultats de la requête.
Par exemple :
-
var row = resu.rows.item(i);
-
// row.id, row.nom etc..
-
}
Exemple de création d’une table :
-
tx.executeSql("CREATE TABLE IF NOT EXISTS matable (id INTEGER PRIMARY KEY, nom TEXT, age NUMERIC)", [],
-
function(tx, rs) {},
-
function(tx, error) {
-
alert("Impossible de créer la table : " + error.message);
-
return;
-
}
-
);
-
});
Insertion de données :
-
tx.executeSql("INSERT INTO TABLE IF NOT EXISTS matable (nom, age) values (?,?)", ['Internet Explorer',72],
-
function(tx, rs) {},
-
function(tx, error) {
-
alert("Impossible d'ajouter des données : " + error.message);
-
return;
-
}
-
);
-
});
Recherche de données :
-
tx.executeSql("select * from matable where age = ?", [72],
-
function(tx, rs) {
-
// on travaille sur les résultats
-
if (!rs.rows.length) {
-
// Aucune ligne retournée
-
alert('aucun résultat');
-
}
-
else {
-
// je triche, on ne récupère ici que le 1er résultat. En même temps, c'est le seul
-
var row = rs.rows.item(0);
-
var lenom = row['nom'];
-
var idnom = row['id'];
-
}
-
},
-
function(tx, error) {
-
alert("Problème d'accès aux données : " + error.message);
-
return;
-
}
-
);
-
});
Voilà, bref aperçu de comment embarquer rapidement et facilement une base de données dans son application web sans devoir installer quoique ce soit sur son serveur.
La seule limitation actuelle est le (non) support par certains navigateurs. Mais cela va très rapidement changer!
24
2009
Tutoriel : comment générer une PHPDoc avec Eclipse
Exemple avec WAMP server sous Windows.
Il faut au préalable installer le paquet PEAR PHPDocumentor à votre PHP.
(ex d’installation PEAR avec WAMP server)
Retourner dans Eclipse, puis cliquer dans le menu sur : Run/External Tools/External Tools Configurations
Sélectionner “Program” puis créer un nouveau.
Dans la fenêtre qui s’ouvre, lui donner un nom (nom de votre phpDoc).
Dans “Location” il faut indiquer le chemin de l’exe de PHP5.
Puis dans argument :
“C:\wamp\bin\php\php5.2.9\PEAR\PhpDocumentor\phpDocumentor\phpdoc.inc” -t ${project_loc}/CHEMIN_OU_GENERER_LA_DOC -o HTML:Smarty:PHP -d ${project_loc}
C:\wamp\bin\php\php5.2.9\PEAR\PhpDocumentor\phpDocumentor\phpdoc.inc = chemin du fichier de conf de la PHPDoc (ne pas omettre les guillements).
D’autres options peuvent être ajoutées (descriptif ici) à la suite des arguments.
Par ex : “-i test.php” pour ignorer le fichier test.php
Aussi “-pp” pour que la doc décrive aussi les méthodes privées.
Ce qui donne comme argument final par ex:
“C:\wamp\bin\php\php5.2.9\PEAR\PhpDocumentor\phpDocumentor\phpdoc.inc” -t ${project_loc}/SPIdoc -o HTML:Smarty:PHP -d ${project_loc} -i test.php -pp
Ensuite, pour générer la PHPDoc du projet en cours, il suffit de cliquer dans le menu sur Run/External Tools/Nom de votre phpDoc
21
2009
BSoftEditor utilisé par EBay!
Quelle surprise j’ai eu en regardant un peu les stats de mon site/blog cette semaine!
En effet, j’ai vu par hasard via un lien referer que mon application web BSoftEditor est utilisée jusque chez EBay en Australie!!
Ca fait toujours plaisir de voir ce genre de choses!
14
2009
Ajout d’une version mobile du blog
Voilà, avec un peu de temps, on peut faire plein de choses!
Désormais, le blog s’adapte aux principaux navigateurs mobiles (Iphone, Opera Mini, Windows CE) grâce au plugin MobilePress.








