Activation, désactivation du wifi sur un D-Link DSL-2640B via PHP

Un script PHP en ligne de commande pour activer // désactiver le wifi sur un modem D-Link DSL-2640B. Cela permet d’illustrer un peu l’intérêt de faire du scripting …

Je ne ferais pas de commentaires, mais n’hésitez pas à poser des questions …

#!/usr/bin/php
<?php
 
//Variable definition
//
//router
$login = 'admin';
$password = 'admin';
$ip = '192.168.1.1';
 
//
//wifi
$wifi = array(
	// /!\ don't touch this /!\
	'wlSsidIdx'	=> 0,
	'wlEnbl'	=> 1,
	'wlCountry'	=> 'GB',
	'wlBasicRate'	=> '',
 
	//ssid name
	'wlSsid'	=> 'monSuperRéseauxWifi',
	//0 = visible, 1 = hide
	'wlHide'	=> 0,
	//number of chanel or 0 for auto selection
	'wlChannel'	=> 1,
	//Transmission Speed
	'wlRate'	=> 0,
	//wifi mode 0=802.11b only, 1=Mixed 802.11g and 802.11b, 4=802.11g only
	'wlgMode'	=> 4,
 
	'wlWpaGTKRekey'	=> 750,
	'wlWpa'			=> 'aes',
	'wlAuthMode'	=> 'psk2',
	//authentification mode : 0 = none, 1 = wep, 2 = auto (wpa or wpa2), 3 = wpa2 only, 4 = wpa only
	'wlAuth'	=> 0,
	'wlWpaPsk'	=> 'masuperclefdelamortquitue',
	'wlWep'		=> 'disabled',
	'wlPreauth'	=> 0
);
 
/////////////////////
 
class cli
{
	const LINE_BREAK = "\r\n";
	const LINE_NO_BREAK = '';
	const LINE_RETURN = "\r";
	const LINE_NOTHING = ' ';
 
	protected $_TEMP = 250000;//1/4 of seconds
	protected $_MULTIPLICATOR = 4; //1/4 -> 4
 
	protected $_LENGTH = 60;
 
	protected function _write_empty_space($lng)
	{
		while($lng < $this->_LENGTH)
		{
			echo ' ';
			$lng++;
		}
	}
 
	protected function _echo($message, $break)
	{
		echo $message, $break;
		if ($break == self::LINE_NO_BREAK)
		{
			$this->_write_empty_space(strlen($message));
		}
	}
 
	protected function _sleep($second)
	{
		$second = $second * $this->_MULTIPLICATOR;
		$i = 0;
		$j = 0;
		while ($i < $second)
		{
			usleep($this->_TEMP);
 
			if ($i % 4)
			{
				$this->_echo('.', self::LINE_NOTHING);
				$i++;
			}
			else
			{
				if($j % 2)
				{
					$this->_echo('', self::LINE_RETURN);
					$this->_write_empty_space(0);
					$this->_echo('', self::LINE_RETURN);
				}
				else
				{
					$this->_echo('Please wait', self::LINE_NOTHING);
					$i++;
				}
				$j++;
			}
		}
		$this->_echo('', self::LINE_RETURN);
	}
}
 
class wifi extends cli
{
	protected $_ch;
	protected $_baseUrl;
 
	public function __construct($wifi, $ip, $login, $password, $activation)
	{
		$this->_baseUrl = 'http://' . $ip . '/';
 
		$this->_ch = curl_init();
		curl_setopt($this->_ch, CURLOPT_HEADER, false);
		curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, true);
 
		$this->_auth($login, $password);
 
		$activation = intval($activation);
 
		if ($activation == 1)
		{
			$this->_activation($wifi);
		}
		else
		{
			$this->_disactivation($wifi);
		}
	}
 
	public function __destruct()
	{
		curl_close($this->_ch);
	}
 
	protected function _activation($wifi)
	{
		$this->_echo('Activation ...', self::LINE_NO_BREAK);
 
		$wifi['wlBasicRate'] = ($wifi['wlgMode'] == 4) ? 'wifi2' : 'default';
 
		$this->_doQuery($this->_baseUrl . 'wirelesssetting.wl?' . http_build_query($wifi, '', '&'));
		$this->_sleep(5);
	}
 
	protected function _disactivation($wifi)
	{
		$this->_echo('Disactivation ...', self::LINE_NO_BREAK);
 
		$wifiDown = array(
			'wlEnbl'	=> 0,
			'wlSsidIdx'	=> $wifi['wlSsidIdx'],
			'wlCountry'	=> $wifi['wlCountry'],
		);
 
		$this->_doQuery($this->_baseUrl . 'wirelesssetting.wl?' . http_build_query($wifiDown, '', '&'));
		$this->_sleep(5);
	}
 
	protected function _doQuery($url, $post = '')
	{
		curl_setopt($this->_ch, CURLOPT_URL, $url);
 
		if (!empty($post))
		{
			curl_setopt($this->_ch, CURLOPT_POST, true);
			curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $post);
		}
		else
		{
			curl_setopt($this->_ch, CURLOPT_HTTPGET, true);
		}
 
		if(curl_exec($this->_ch) === false)
		{
			$this->_echo('', self::LINE_BREAK);
			$this->_echo('Error Curl : ' . curl_error($this->ch), self::LINE_BREAK);
		}
		else
		{
			$this->_echo('DONE', self::LINE_BREAK);
		}
	}
 
	protected function _auth($login, $password)
	{
		$this->_echo('Authentification ...', self::LINE_NO_BREAK);
 
		$post = array(
			'username'	=> $login,
			'password'	=> $password
		);
 
		$this->_doQuery($this->_baseUrl . 'index.html', http_build_query($post, '', '&'));
	}
}
 
if ($argc != 2)
{
	echo ' synthaxe : scriptname.php 1 for activation or 0 for desactivation ';
	exit();
}
 
new wifi($wifi, $ip, $login, $password, $argv[1]);
 
# EOF

Certes, le script ne gère pas tout, mais le but était de jouer avec la ligne de commande tout en n’allant pas dans les extensions exotiques de gestion de celle-ci ….

Questionnaire – sondage en ligne

J’en ai vu passé des questionnaires de fin de thèse ou des sondage pour tel ou tel société mais jamais je n’avais songé prendre note des références des logiciel ou des sociétés utilisé pour créer ces sondages-enquêtes! Du coup, en ayant eu besoin j’ai du chercher…

Et là cela se complique, on se rend vite compte que beaucoup de société propose des service payant et là ou pour n’importe quel script on trouve facilement des réponses à droite et à gauche, ici rien! Bien embêté me voila sur le chemin de la recherche.

Bref après quelques recherche et élimination je trouve deux sites proposant des services gratuits et qui semble correcte :
http://www.paxonta.com et http://www.sondageonline.com

Cependant, je me dit qu’il y avait certainement un projet open-source qui se devait d’exister et que si ce n’est pas le cas, alors le moment de hurler et de se lancer dans la bataille en faisant son William Walace devait arriver. Mais heureusement, pas besoin de tête tranchée le script fut trouvé :  LimeSurvey

Je ne suis pas déçu et ils propose même un service en ligne : http://www.limeservice.com
Par contre, il m’a fallu un peu de temps pour comprendre …. En gros, toujours cliquer sur l’icône à droite (l’espèce de feuille ….) et voila!

Perso je trouve que c’est encore fort compliqué … mais bon on peux pas tout avoir ….

J’en profite pour vous le faire tester en répondant a ce magnifique questionnaire sur les forums!

Raid logiciel sous GNU/Linux

Voici un petit trucs fort intéressant, la création d’un raid logiciel sous GNU/Linux (ici Ubuntu, mais théoriquement c’est la même chose pour toutes les distribution).

But : Créer un raid logiciel à partir d’un disque contenant des données (/dev/sda) et d’un autre disque vide (/dev/sdc).

Rappel : Un raid logiciel contrairement à un raid matériel repose uniquement sur du logiciel (d’ou le nom 😉 ), l’avantage c’est un gain de mobilité (en effet pas besoin de rechercher le même matériel pour restaurer ces données); l’inconvénient, petite perte de performance.

Procédure :

  • On suppose que l’on est en mode super utilisateur (root)
  • Installer mdadm : aptitude install mdadm
  • Mettre le flag de la partition (ici la 5ième donc /dev/sda5 et /dev/sdc5) sur raid : parted -s /dev/sda set 5 raid on et parted -s /dev/sdc set 5 raid on
  • Création du raid : mdadm -C /dev/md0 --level=1 -n=2 /dev/sda5 /dev/sdc5 => mdadm : array /dev/md0 started
  • Vérification : mdadm --detail /dev/md0
  • Regarder l’état d’avancement de la « reconstruction » (attention pas de rebootage durant cette phase ….) : cat /proc/mdstat ou watch cat /proc/mdstat ou mdadm --detail /dev/md0 | grep Rebuild
  • Une fois fini, n’oubliez pas de changer le fstab si vous voulez que cela soit monter automatiquement.
  • Si aucun système de fichier n’était présent sur /dev/sda5 ou /dev/sdc5 il vous faudra le créer via les outils habituels en prenant /dev/md0 comme disque de référence.

Remarques :

  • Les partitions doivent être identique en terme de taille mais ne doivent pas nécessairement être dans le même ordre.
  • Le cas illustré est du raid miroir.
  • Dans tout les cas faites une sauvegarde AVANT de faire quoi que se soit.

Info :

FSB RC est sortie!

Je vous le disait il y a peu, la nouvelle RC de FSB 2 allait sortir.

C’est chose faites !

Les principales nouveauté sont les suivantes :

  • Chiffrement RSA pour les identifiant
  • FSBCard (idée dont je suis fier) qui permet l’export de son profil ainsi que de ses préférences
  • Un mode bas débit du forum
  • L’option d’installation rapide, génial pour les développeurs!
  • Plein de fix
  • Possibilité de mettre des sondage dans les map des message, pour rappel les maps des messages étant une présentation d’un nouveau sujet||message à posté
  • Refonte complète du système de procédure modératives

Bref on sent que la version final approche et surtout que FSB2 à un grand avenir devant lui!

Mon seul regret : le thème que je trouve bof bof

L’annonce officiel

PhpDocumentor 1.4.0a1 est sorti!

Phpdocumentor, vient de sortir une mise à jour (pour le moment en alpha mais bon)

Phpdocumentor 1.4.0a1 iest une version alpha qui contient nombres de modifications!
Les plus importantes modifications sont les notations supplémentaires :

  • @property,
  • @property-read,
  • @property-write

Ceci permettant de mieux définir les méthodes magiques get() et set(), pour plus d’infos lire le manuel de phpdocumentor

Cette version inclut aussi les recommandations provenant de PEAR :

  • Req #10670: Ne plus s’arrêter dans le cas où le tag description est vide!
  • Doc #10675: Supprime certaines erreur html
  • Doc #10730: Remplace le report de bug de soureforge par celui de PEAR

Mais aussi celle de Sourceforge :

  • 1647423 memory_limit: mauvaise en cas de clause if
  • 1622538 et 1044752 Liste de class et fonction non documenté!
  • 1602988 Ajout de l’option : –ignore-symlinks
  • 1588942 Permetre de configurer memory_limit dans phpdoc.ini
  • 1588936 Montrer le chemin vers le répertoire INI au démarrage
  • 1585840 Refactored RETURNs #3
  • 1574047 Refactored RETURNs #2
  • 1574043 Refactored RETURNs #1
  • 1543289 Appliquer les chemin ignorer vers les sous répertoires et répertoires à la place d’un chemin complet!instead of full path
  • 1543287 Utilisé les variables d’environnement prédéfinie dans phpdoc
  • 1540666 ajout de @property, @property-read et @property-write

La news : http://phpdoc.org/news.php?id=55
Le site de phpdocumentor : http://www.phpdoc.org