Можно ли сделать трассировку в браузере?
Я ищу способ сделать трассировку на стороне клиента, т. е. в браузере.
насколько я знаю, невозможно отправить 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 в расширения / дополнения. К сожалению, вышесказанное больше не работает.
Мда... нет, из-за модели безопасности.
вы может быть в состоянии сделать это в определенном браузере с плагином, но не произвольный браузер не используя широко доступные.
Я бы хотел, чтобы здесь было доказано обратное.
может быть, немного поздно, но может быть интересно для будущих чтений (например, мой :-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".