Est-il possible de faire une traceroute dans le navigateur?

Je cherche un moyen de faire un client côté traceroute, c'est-à-dire dans un navigateur.

Pour autant que je sache, il n'est pas possible d'envoyer des paquets ICMP, UDP ou TCP avec des valeurs TTL arbitraires via Javascript ou Flash. Je sais que Flash permet les connexions TCP via la classe Socket dans Actionscript, mais cela ne semble pas utile pour une implémentation de Traceroute.

Est-ce que la seule solution est de développer un plug-in de navigateur?

EDIT : Je viens de découvrir que cela a été fait avec une applet Java: http://www.codefromthe70s.org/traceroute.aspx

Les mauvaises nouvelles sont que cette applet nécessite un code signé car il analyse en fait la sortie de l'exécutable ping du système client sous-jacent. Pour cette raison, l'utilisateur est invité à permettre à l'application Java de s'exécuter, ce qui est encombrant.

Plus d'informations ici: http://www.codefromthe70s.org/traceroute_explained.aspx

Je suis toujours à la recherche d'une solution plus simple si quelqu'un peut vous aider.

EDIT 2 : Merci pour vos réponses. Je suppose que je devrai aller avec Java alors.

Je me demande si NaCl ( http://code.google.com/p/nativeclient/ ) prendrait en charge une sorte d'application Traceroute.

Vous ne pouvez pas le faire à partir d'un navigateur. Javascript peut au mieux ouvrir une connexion à son serveur d'origine pour les demandes AJAX, mais ne peut le faire que via HTTP. Flash peut parler à des hôtes arbitraires, mais seulement s'ils sont répertoriés dans un fichier crossdomain.xml sur le serveur d'origine, et encore une fois via TCP. Le support UDP dans Flash est apparemment en attente.

Traceroute et ping sont tous deux des protocoles ICMP et ne peuvent pas être créés / contrôlés à partir de Flash ou de Javascript. Ils ont tous deux besoin d'un accès «brut» pour créer des paquets personnalisés, ce qui ne peut certainement pas être fait sur le navigateur. C'est pourquoi le «ping» est un programme «SUID» sur les systèmes Unix, car l'accès en paquet brut requiert des privilèges root.

Au mieux, vous pouvez effectuer une implémentation côté serveur et envoyer la sortie au navigateur. Et même alors, vous ne pouvez probablement pas le faire à partir d'un processus dans le serveur sur une boîte Unix, car il est peu probable que le serveur Web fonctionne en tant que root. Vous devriez exécuter le système ping et / ou traceroute et rediriger la sortie vers le navigateur.

Pourquoi ne signez vous pas simplement l'applet? Le problème n'est-il pas réellement plus vous ne savez pas comment signer l'applet? Si c'est le cas, commencez ici: jarsigner . Voici un tutoriel plus clair.

En fait, il n'y a pas de solution plus simple ou meilleure que l'exécution d'un code et / ou des commandes sur la machine client. Le traceroute doit vraiment être originaire de la machine client.

Javascript et Actionscript ne peuvent pas le faire en raison de restrictions de sécurité. Ils vivent uniquement dans le contexte de la page Web. Silverlight pourrait être capable de faire, mais ne m'intéresse pas. Je ne fais pas de choses NET.

Il existe une extension de navigateur CoNetServ (réseau complexe). Il est capable de faire de Traceroute depuis votre machine locale directement dans votre navigateur. http://wiki.github.com/VojtechVitek/CoNetServ/

Extension Chrome: https://chrome.google.com/extensions/detail/mmkpilpdijdbifpgkpdndpjlkpjkihee Ajout de Firefox: https://addons.mozilla.org/en-US/firefox/addon/181909/


EDIT: Chrome et Firefox ont révoqué le regroupement de bibliothèques NPAPI dans les extensions / add-ons. Malheureusement, ce qui précède ne fonctionnera plus.

Hmm … non, en raison du modèle de sécurité.

Vous pourriez pouvoir le faire dans un navigateur particulier avec un plug-in, mais pas un navigateur arbitraire utilisant n'importe quoi largement disponible.

Je voudrais être prouvé par erreur ici.

Que diriez-vous d'exécuter Traceroute sur le serveur et de renvoyer le résultat avec un peu d'appel ajax?

Peut-être un peu en retard, mais pourrait être intéressant pour les lectures futures (comme le mien :-D).

Java 1.5 a une classe InetAdress avec une méthode isReachable, que vous pouvez essayer. Vérifie ça:

http://download.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html#isReachable(int )

Vous n'avez pas besoin de créer une applet et de la signer! Il est possible d'utiliser java à partir de javascript. J'ai fait un script pour faire une traceroute avec ActiveX ou Java.

Je ne vois aucun avertissement de sécurité sur OS X. Essayez-le sur Windows et Linux et dites-moi ce qui se passe 🙂

UPD: il semble que cela fonctionne uniquement dans Firefox

<script type="text/javascript"> function runapp() { var domain = "10.10.35.1"; var cmdLine = "tracert" +" " + domain; var wshShell = new ActiveXObject("WScript.Shell"); var out = wshShell.Exec(cmdLine); var output1 = out.StdOut.ReadAll(); document.getElementById('box').innerHTML += output1; } </script> <div id="box" align="center"></div> <button onclick="runapp();">Click me!</button> 

Donc, cela fonctionne uniquement dans IE en raison de ActiveX.

Il exécutera Traceroute vers 10.10.35.1 et écrira la sortie sur div avec id = "box".