Можно ли сделать traceroute в браузере?
Я ищу способ сделать клиентскую часть 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
Я все еще ищу более простое решение, если кто-то может помочь.
EDIT 2: Спасибо за ваши ответы. Думаю, мне придется пойти с Java.
Интересно, будет ли NaCl (http://code.google.com/p/nativeclient/) поддерживать какое-то приложение traceroute.
Ответы
Ответ 1
Вы не можете сделать это вообще из браузера. Javascript может в лучшем случае открыть соединение с исходным сервером для запросов AJAX, но может делать это только через HTTP. Flash может разговаривать с произвольными хостами, но только если они указаны в файле crossdomain.xml на исходном сервере и снова только через TCP. Поддержка UDP во Flash, по-видимому, ожидается.
Traceroute и ping - это протоколы, основанные на ICMP, и не могут быть созданы/управляются с помощью Flash или Javascript. Они также требуют "сырого" доступа для создания пользовательских пакетов, и это определенно не может быть сделано на стороне браузера. Вот почему "ping" - это программа "SUID" для Unix-систем, поскольку для доступа к пакетному доступу требуются привилегии root.
В лучшем случае вы можете выполнить серверную реализацию и получить вывод, отправленный в браузер. И даже тогда вы, скорее всего, не смогли бы сделать это из процесса на сервере в окне Unix, поскольку веб-сервер вряд ли будет работать от имени root. Вам нужно будет выполнить ping системы и/или traceroute и перенаправить вывод обратно в браузер.
Ответ 2
Почему бы вам просто не подписать апплет? Разве проблема не в том, что вы еще не знаете, как подписать апплет? Если да, тогда начинайте здесь: jarsigner. Здесь - более четкое руководство.
На самом деле нет более простого/лучшего решения, чем фактически запускать часть кода и/или команд на клиентской машине. Traceroute действительно должен возникнуть на клиентской машине.
Javascript и ActionScript не могут этого сделать из-за ограничений безопасности. Они живут только в контексте веб-страницы. Silverlight, возможно, сможет это сделать, но не прикасайтесь ко мне. Я не делаю NET.
Ответ 3
Существует расширение браузера CoNetServ (Комплексные сетевые сервисы). Он может выполнять трассировку с вашего локального компьютера прямо в браузере.
https://github.com/VojtechVitek/CoNetServ/wiki
Расширение Chrome: https://chrome.google.com/extensions/detail/mmkpilpdijdbifpgkpdndpjlkpjkihee
Дополнение Firefox: https://addons.mozilla.org/en-US/firefox/addon/181909/
ОБНОВЛЕНИЕ: И Chrome, и Firefox отменили объединение библиотек NPAPI в расширения/дополнения. К сожалению, вышесказанное больше не будет работать.
Ответ 4
Хм... нет, из-за модели безопасности.
может иметь возможность делать это в определенном браузере с помощью подключаемого модуля, но не с любым браузером, использующим что-либо широко доступное.
Мне бы хотелось, чтобы здесь было неправильно.
Ответ 5
Как насчет выполнения traceroute на сервере и возврата результата с somekind ajax-вызова
Ответ 6
Возможно, немного поздно, но может быть интересен для будущих чтений (например, mine: -D).
В Java 1.5 есть класс InetAdress с методом isReachable, который вы можете попробовать. Проверьте это:
http://download.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html#isReachable(int)
Ответ 7
Вам не нужно создавать апплет и подписывать его! Можно использовать java из javascript.
Я сделал script для выполнения traceroute с ActiveX или Java.
Я не вижу никаких предупреждений о безопасности на OS X. Попробуйте это в Windows и Linux и скажите мне, что происходит: -)
UPD: кажется, что он работает только в Firefox
Ответ 8
<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".