Действительно ли возможно сделать traceroute в браузере?

Я ищу способ сделать 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 приложение.

18
задан Cœur 19 February 2017 в 13:55
поделиться

5 ответов

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

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

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

5
ответ дан 30 November 2019 в 09:21
поделиться

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

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

Я хотел бы, чтобы здесь было доказано, что я ошибаюсь.

1
ответ дан 30 November 2019 в 09:21
поделиться

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

0
ответ дан 30 November 2019 в 09:21
поделиться

Основная проблема заключается в том, что вы не знаете, в какой кодировке находятся ваши данные. Если мы полагаем, что вы правы в том, что ваш файл в конечном итоге находится в 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 не могут сделать это из-за ограничений безопасности. Они живут только в контексте веб-страницы. Сильверлайт мог бы это сделать, но не связывай меня с этим. Я не занимаюсь сетевыми вещами.

5
ответ дан 30 November 2019 в 09:21
поделиться

Существует расширение для браузера 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 в расширения/дополнения. К сожалению, вышеописанное больше не будет работать.

3
ответ дан 30 November 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: