Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Un semplice TraceRoute in PHP

Articolo scritto da Claudio Garau

Con il termine TraceRoute si identifica uno strumento molto diffuso utilizzato per verificare la connettività tra il proprio terminale e un indirizzo Web generico, ad esempio un numero IP.

I TraceRoute vengono utilizzati ormai da 20 anni, cioè da quando un ricercatore del Lawrence Berkeley National Laboratory chiamato Van Jacobson li introdusse per la prima volta nel 1988 su sistema operativo Unix.

In origine, un TraceRoute consisteva in un'applicazione ideata per monitorare alcune problematiche di comunicazione a carico del sistema, oggi è invece divenuto componente standard nelle implementazioni del protocollo TCP/IP (Trasmission Control Protocol/Internet Protocol) detto anche Internet Protocol Suite.

(L'articolo continua più sotto...)

Un TraceRoute ha il compito di eseguire una scansione su tutti i nodi intermedi che si trovano tra il client che genera l'input e l'indirizzo di destinazione, cioè il parametro di riferimento per l'azione di scansione.
Il monitoraggio viene eseguito tramite un campo dell'header del protocollo IP contenuto all'interno dei pacchetti di III livello inviati verso il network; questo campo prende il nome di TTL (Time To Live) e ha come valore di default quello definito dal sistema operativo e scritto nei packages inviati verso l'indirizzo di destinazione.

Semplificando, potremo dire che il un TraceRoute utilizza il TTL per determinare con buona approssimazione quali sia il percorso ricompreso tra due Host.
Inizialmente, viene inviato verso l'Host di destinazione un package con TTL pari a 1; quest'ultimo viene ignorato dal primo router (o dal provider) che segnala tramite ICMP (Internet Control Message Protocol) le sue coordinate al mittente.
Fatto questo viene inviato un secondo package con TTL pari a 2, che viene ignorato dal secondo router permettendo la sua identificazione.

Il ripetersi delle trasmissioni si interromperà soltanto nel momento in cui l'Host di destinazione verrà raggiunto, oppure, e qui stà l'esigenza del monitoraggio, a causa di un timeout dovuto ad errori. La definizione Time To Live acquista quindi significato, perchè l'iterazione nell'invio dei package ha a disposizione un determinato ciclo di vita e non di più.

Generalmente i TraceRoute vengono eseguiti da linea di comando, ma è possibile anche creare un piccolo script PHP in grado di svolgere la medesima funzione:

<?php
// Variabile da peronalizzare
// Lasciare 1 se il vostro O.S. è unix/linux
// impostare 0 se siete su Windows
$unix =  1;      

$unix = (bool)$unix;
$system = ini_get('system');
$trace = $_GET['trace'];
$host = $_POST['host'];
$self = $_SERVER['PHP_SELF'];

if ($trace == "OK") 
{
  // sostituisco i caratteri nocivi
  $host = preg_replace("/[^A-Za-z0-9.]/", "", $host);

  echo "Ecco il risultato del Trace:<br/><pre>";  
  // Uso system per eseguire il comando traceroute (su unix)...         
  if ($unix) 
  {
    system("traceroute $host");
    system("killall -q traceroute");
  // ...oppure tracert su windows
  }else{
    system("tracert $host");
  }
  echo "</pre>";  
}else{
  ?>
  <form method="POST" action="<? echo $self; ?>?trace=OK">
  Inserisci un Host o un IP<br/>
  <input type="text" name="host" value="www.mrwebmaster.it" />
  <input type="submit" value="Traceroute!" />
  </form>
  <?
}
?>
Lo script qui sopra, ampiamente commentato, non fa altro che eseguire il comando traceroute (o tracert se siete su Windows) sul host o sull'IP indicato.

Dalla sua esecuzione ricaveremo sostanzialmente due dati, uno relativo alla latenza o meno delle trasmissioni nel passaggio tra i nodi, l'altro di tipo geografico. Inoltre sarà semplice individuare i nomi dei providers coinvolti nell'iterazione. Il dato di tipo geografico può essere ricavato in modi diversi. Il più preciso viene fornito dall'archivio dei DNS tramite il campo LOC relativo al nodo, ma questa informazione non è sempre disponibile e quindi è possibile dover ricorrere a delle alternative:

Lo script funziona correttamente sia specificando un hostname che un indirizzo IP.

Corsi
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. A partire da 49 €.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122