Можно ли сделать трассировку в браузере?

Я ищу способ сделать трассировку на стороне клиента, т. е. в браузере.

насколько я знаю, невозможно отправить ICMP, UDP или TCP-пакеты с произвольными значениями TTL через Javascript или Flash. Я знаю, что Flash позволяет TCP-соединения через класс сокета в Actionscript, но это не кажется полезным для реализации трассировки.

является ли единственным решением для разработки плагина браузера ?

редактировать: Я только что узнал, что он был сделано с помощью апплета Java:http://www.codefromthe70s.org/traceroute.aspx

плохая новость заключается в том, что этот апплет требует подписанного кода, потому что он фактически анализирует вывод из исполняемого файла ping базовой клиентской системы. Из-за этого пользователю предлагается разрешить запуск приложения Java, что является громоздким.

подробнее здесь: http://www.codefromthe70s.org/traceroute_explained.aspx

Я все еще ищу для более простого решения, если кто-то может помочь.

Изменить 2: Спасибо за ваши ответы. Думаю, тогда мне придется пойти с Java.

интересно, если NaCl (http://code.google.com/p/nativeclient/) будет поддерживать какое-то приложение traceroute.

8 ответов


вы не можете сделать это вообще из браузера. Javascript может в лучшем случае открыть соединение с исходным сервером для запросов AJAX, но может сделать это только через HTTP. Flash может разговаривать с произвольными хостами, но только если они перечислены в crossdomain.xml-файл на исходном сервере, и снова только через TCP. Поддержка UDP во Flash, по-видимому, ожидает.

Traceroute и ping являются протоколами на основе ICMP и не могут быть созданы/управляться из Flash или Javascript. Они также оба требуется "сырье" для создания пользовательских пакетов, и это определенно не может быть сделано на стороне браузера. Вот почему "ping" - это программа "SUID" в системах Unix, поскольку доступ к необработанным пакетам требует привилегий root.

в лучшем случае вы можете выполнить реализацию на стороне сервера и отправить вывод в браузер. И даже тогда вы, скорее всего, не сможете сделать это из серверного процесса на Unix-сервере, поскольку веб-сервер вряд ли будет работать как root. Вам нужно будет выполнить системный ping и / или traceroute и перенаправить вывод в браузер.


Почему бы тебе не просто подписать аплет? Разве проблема не в том, что вы не знаете, как подписать апплет? Если да, то начните здесь:jarsigner. здесь является более четким учебником.

на самом деле нет более простого/лучшего решения, чем на самом деле запуск некоторого фрагмента кода и / или команд на клиентском компьютере. Трассировка действительно должна исходить от клиентской машины.

Javascript и Actionscript не удается сделать это из-за ограничений безопасности. Они живут только в контексте веб-страницы. Сильверлайт, может быть, и сможет, но не вешай меня на это. Я не занимаюсь сетями.


существует расширение браузера CoNetServ (комплексные сетевые службы). Он способен сделать traceroute с вашего локального компьютера прямо в вашем браузере. http://wiki.github.com/VojtechVitek/CoNetServ/

расширение Chrome:https://chrome.google.com/extensions/detail/mmkpilpdijdbifpgkpdndpjlkpjkihee Firefox дополнения:https://addons.mozilla.org/en-US/firefox/addon/181909/


EDIT: как Chrome и Firefox отозвали связывание библиотек NPAPI в расширения / дополнения. К сожалению, вышесказанное больше не работает.


Мда... нет, из-за модели безопасности.

вы может быть в состоянии сделать это в определенном браузере с плагином, но не произвольный браузер не используя широко доступные.

Я бы хотел, чтобы здесь было доказано обратное.


Как насчет выполнения traceroute на сервере и возврата результата с somekind ajax call


может быть, немного поздно, но может быть интересно для будущих чтений (например, мой :-D).

Java 1.5 имеет класс InetAdress с isreachable методом, который вы можете попробовать. Проверьте это:

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


вам не нужно создавать апплет и подписывать его! Можно использовать java из javascript. Я сделал скрипт для выполнения трассировки с помощью ActiveX или Java.

Я не вижу никаких предупреждений безопасности на OS X. попробуйте его на Windows и Linux и скажите мне, что происходит: -)

UPD: похоже, что он работает только в 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>

поэтому он работает только в IE из-за ActiveX.

он будет запускать traceroute до 10.10.35.1 и записывать выходные данные в div с id="box".