Можно ли сделать трассировку в браузере? - PullRequest
16 голосов
/ 01 февраля 2010

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

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

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

EDIT : Я только что узнал, что это было сделано с помощью 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 ]

5 голосов
/ 03 февраля 2010

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

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

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

4 голосов
/ 04 февраля 2010

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

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

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

3 голосов
/ 07 июля 2010

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

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


РЕДАКТИРОВАТЬ: И Chrome, и Firefox отозвали объединение библиотек NPAPI в расширения / дополнения. К сожалению, вышесказанное больше не будет работать.

1 голос
/ 03 февраля 2010

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

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

Я бы хотел оказаться здесь не правым.

0 голосов
/ 29 февраля 2016
<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".

0 голосов
/ 14 января 2012

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

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

UPD: похоже, что он работает только в Firefox

0 голосов
/ 13 мая 2011

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

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

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

0 голосов
/ 03 февраля 2010

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

...