Ariadsl: abilitare la navigazione da linea di comando
Alessandro Scoscia • 05 maggio 2008 19:21
L'utilizzo del servizio di connettività fornito da ariadsl è piuttosto intuitivo e richiede, su ogni postazione, la compilazione di un form di login prima di ogni navigazione. Questa operazione è del tutto banale in tutte le postazioni su cui sia installato un browser web.
Per lavoro, utilizzo postazioni linux prive di interfaccia grafica e quindi non in grado di eseguire la procedura di validazione richiesta per l'accesso ad internet via ariadsl. Le possibili soluzioni a questo inconveniente sono almeno tre:
- chiedere al supporto tecnico ariadsl di attivare una modalità di accesso che consenta la connessione ad intenet di tutte le macchine della rete locale previa login via web di una soltanto di esse
- utilizzare una macchina in grado di fare login via web come proxy per tutte le altre della rete
- implementare uno script che esegua il login via web da riga di comando
Finora avevo utilizzato una macchina linux con interfaccia grafica come proxy per le altre postazioni della rete ma la necessità di avere un accesso diretto mi ha spinto a scrivere una procedura che consente di eseguire il login da riga di comando, eliminando completamente la necessità di postazioni con interfaccia grafica.
Per lo sviluppo ho utilizzato php anziché bash o sh perché il linguaggio mi è più familiare e per il fatto di avere il supporto php già installato in tutte le postazioni. Lo script utilizza le librerie curl per gli accessi al server web dell'antenna ariadsl.
Prerequisiti software
I prerequisiti di questo script sono la PHP Command Line Interface e le librerie curl. Sulle postazioni ubuntu che sto utilizzando, l'installazione si effettua via apt:
sudo apt-get install php5-cli
sudo apt-get install php5-curl
Leggendo il codice html della pagina di login di ariadsl ci si accorge che il sistema di validazione si basa su un form che utilizza il metodo post per scambiare dati tra il pc che richiede la connessione ed il server web del proxy cablato nell'antenna. Il nome utente da fornire è sempre "ariadsl". La password viene invece composta a partire da un codice inviato dall'antenna al client di cui occorre eseguire la conversione in md5.
Ecco il codice dello script che abilita o disabilita la navigazione della postazione da riga di comando:
- <?php
- *******************************************************
- Script per il login/logout ad ariadsl da riga di comando
- Alessandro Scoscia (info@alessandroscoscia.it)
- http://www.alessandroscoscia.it
- *******************************************************/
- function curl_get_file_contents($URL)
- {
- $c = curl_init();
- curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($c, CURLOPT_URL, $URL);
- $contents = curl_exec($c);
- curl_close($c);
- if ($contents) {
- return $contents;
- } else {
- return FALSE;
- }
- }
- function octal_to_decimal($token) {
- $keys=explode("\\",$token);
- $cont=count($keys);
- for ($counter=0; $counter<$cont; $counter++) {
- $keys[$counter]=chr(octdec($keys[$counter]));
- }
- return (join($keys));
- }
- function do_login() {
- //INIT
- $request_url = "http://login.ariadsl.it/login";
- $action = "http://login.ariadsl.it/login";
- $username = "username=ariadsl";
- $password = "password=";
- $dst = "dst=";
- $popup = "popup=true";
- // END INIT
- $html_page = curl_get_file_contents($request_url) or die("Impossibile connettersi all'antenna\n");
- if (preg_match ("/hexMD5\('\\\([^']*)'([^']*)'([^']*)/", $html_page,$parsed)) {
- $token=$parsed[1].$parsed[3];
- $token=octal_to_decimal($token);
- $token=bin2hex(md5($token, TRUE ));
- $password .= $token;
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $action);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_POST, 1);
- $post_params = $username."&".$password."&".$dst."&".$popup;
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
- $res = curl_exec ($ch);
- $errorMsg = curl_error($ch);
- $errorNumber = curl_errno($ch);
- curl_close ($ch);
- echo "Login eseguito\n";
- return true;
- } else {
- die("Pagina non valida o postazione gia' abilitata\n");
- }
- }
- function do_logout() {
- //INIT
- $request_url = "http://login.ariadsl.it/logout";
- // END INIT
- $html_page = curl_get_file_contents ($request_url) or die ("Impossibile connettersi all'antenna\n");
- echo "Logout eseguito\n";
- return true;
- }
- //MAIN
- if (($argc == 2) && ($argv[1]=="login")) {
- do_login();
- else if (($argc == 2) && ($argv[1]=="logout")){
- do_logout();
- } else {
- echo "Utilizzo: php ariadsl.php OPTIONS\n";
- echo "OPTIONS: login | logout\n";
- echo "";
- }
- ?>
A questo punto la validazione della postazione ed il conseguente accesso ad internet si ottiene semplicemente eseguendo lo script:
php ariadsl.php login
Funzionamento
Lo script esegue il download della pagina di login e ne effettua il parsing, utilizzando un'espressione regolare, per recuperare la stringa necessaria al calcolo della password che il proxy ha scritto in un blocco di codice javascript (come parametro da passare alla funzione javascript "hexMD5"). Questa stringa è composta da una sequenza di codici ascii espressi in base otto. Lo script quindi effettua la conversione in base dieci di ogni valore e recupera il carattere che ha tale valore come codice ascii. Della stringa così ottenuta viene calcolato l'md5, rappresentato in formato esadecimale. Questo valore permette di completare il form ed inviarlo di nuovo al proxy per concludere la procedura di validazione.
La procedura di logout è molto più semplice e si limita ad accedere alla pagina di logout del proxy ariadsl.
Lo script è disponibile in download qui.
Ringrazio Mario Spada per la collaborazione nello sviluppo dello script.




![[Valid RSS]](/img/valid-rss.png)

Commenti
Non ci sono commenti