Я ищу способ сделать traceroute клиентское, т.е. в браузере.
Насколько я знаю, не возможно отправить ICMP, UDP или пакеты TCP с произвольными значениями TTL с помощью JavaScript или Flash. Я знаю, что Flash позволяет соединения TCP через класс Сокета в Actionscript, но это не кажется полезным для traceroute реализации.
Единственное решение состоит в том, чтобы разработать плагин браузера?
Править: Я просто узнал, что это было сделано с апплетом 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 приложение.
Вы вообще не можете сделать это из браузера. Javascript может в лучшем случае открыть соединение с исходным сервером для запросов AJAX, но может сделать это только через HTTP. Flash может взаимодействовать с произвольными хостами, но только если они указаны в файле crossdomain.xml на исходном сервере, и опять же только через TCP. Поддержка UDP во Flash, по-видимому, ожидается.
Traceroute и ping являются протоколами на основе ICMP и не могут создаваться / контролироваться из Flash или Javascript. Они также требуют «сырого» доступа для создания пользовательских пакетов, а это определенно невозможно сделать на стороне браузера. Вот почему «ping» является программой «SUID» в системах Unix, поскольку для доступа к необработанным пакетам требуются привилегии root.
В лучшем случае вы можете реализовать реализацию на стороне сервера и отправить результат в браузер. И даже в этом случае вы, скорее всего, не сможете сделать это из внутрисерверного процесса в системе Unix, поскольку веб-сервер вряд ли будет работать от имени пользователя root. Вам нужно будет выполнить системный ping и / или traceroute и перенаправить вывод обратно в браузер.
Хм... нет, из-за модели безопасности.
Вы можете сделать это в определенном браузере с помощью плагина, но не в произвольном браузере, используя что-либо широко доступное.
Я хотел бы, чтобы здесь было доказано, что я ошибаюсь.
Как насчет выполнения Traceroute на сервере и возвращение результата с помощью ajax call
Основная проблема заключается в том, что вы не знаете, в какой кодировке находятся ваши данные. Если мы полагаем, что вы правы в том, что ваш файл в конечном итоге находится в Mac OS Roman, то вам нужно сначала декодировать данные в Юникод, а затем кодировать его как iso-8859-1.
inputFile = open("input.rtf", "rb") # The b flag is just a marker in Python 2.
data = inputFile.read().decode('mac_roman')
textData = yourparsefunctionhere(data)
outputFile = open( "textbase.tab", "wb" ) # don't use file()
for k, v in textData.iteritems():
complete_line = k + '~~~~~' + v + '~~~~~' + " ENDOFTHELINE"
outputFile.write((complete_line + "\n").encode("iso-8859-1"))
outputFile.close()
Но я не удивлюсь, так как это RTF, если это кодировка Windows, так что вы можете попробовать это тоже. Я не знаю, как RTF определяет кодировку.
-121--4268504-HTTP является протоколом приложения. REST - это набор правил, которые при следовании позволяют создать распределенное приложение, имеющее определенный набор желательных ограничений.
Если вы ищете наиболее существенные ограничения REST, которые отличают приложение RESTful от любого HTTP-приложения, я бы сказал, что ограничение «самописания» и ограничение гипермедиа (иначе Hypermedia как Engine of Application State (HATEOAS)) являются наиболее важными.
Ограничение самописания требует, чтобы запрос RESTful был полностью самоописательным в намерениях пользователей. Это позволяет посредникам (прокси и кэши) безопасно работать с сообщением.
Ограничение HATEOAS заключается в превращении приложения в сеть ссылок, где текущее состояние клиента основано на его месте в этой сети. Это сложная концепция и требует больше времени, чтобы объяснить, чем у меня есть сейчас.
-121--568477-Почему бы вам просто не подписать апплет? Не проблема ли в том, что ты больше не знаешь, как подписать апплет? Если да, то начните здесь: jarsigner . Здесь - более понятное учебное пособие.
На самом деле не существует более простого/лучшего решения, чем , выполняющий часть кода и/или команд на клиентской машине. Трассировка действительно должна исходить от клиентской машины.
Javascript и Actionscript не могут сделать это из-за ограничений безопасности. Они живут только в контексте веб-страницы. Сильверлайт мог бы это сделать, но не связывай меня с этим. Я не занимаюсь сетевыми вещами.
Существует расширение для браузера CoNetServ (Complex Network Services). Оно способно выполнять traceroute с локальной машины прямо в браузере. https://github.com/VojtechVitek/CoNetServ/wiki
Расширение для Chrome: https://chrome.google.com/extensions/detail/mmkpilpdijdbifpgkpdndpjlkpjkihee. Дополнение для Firefox: https://addons.mozilla.org/en-US/firefox/addon/181909/
EDIT: И Chrome, и Firefox отменили включение библиотек NPAPI в расширения/дополнения. К сожалению, вышеописанное больше не будет работать.