2014-11-26 1 views
6

Я играю вокруг, пытаясь найти способ связи между двумя браузерами в той же сети, чтобы установить WebRTC без серверного обратного перехода (без STUN/ICE/TURN). В основном альтернатива найденному подходу here, где «рукопожатие» выполняется с помощью копирования/письма/вставки.Может ли браузер напрямую взаимодействовать с другим браузером в той же сети?

После просеивания через все примеры кросс-браузерная связи я мог бы найти (как via cookies или WebTCP) плюс кучу вопросов на SO (как here), я вернулся, чтобы интересно простую вещь:

Вопрос:
Если Алиса и Боб посещают ту же страницу foo.html в той же сети, и они знают внутренние назначенные IP-адреса друг друга, есть ли способы, которыми они могут общаться исключительно с тем, что доступно в браузере?

Это исключает нестандартные API, такие как Mozilla TCP_Socket_API, но кроме этого разрешены все «трюки» (теги img, iframes, cookies и т. Д.).

Мне просто интересно, если я могу слушать кого-то в той же сети, что «трансляция» чего-то через браузер вообще.

Edit:
foo.html будет на статическом сервере, нет логики, нет ДВС, нет ярлыка.

Edit:
Еще не решение, а сервер WebSocket как расширение Chrome приближается. Пример здесь: almost pure browser serverless WebRTC

+1

С каких пор служил 'foo.html'? – Bergi

+0

Хорошая точка. Может быть такой же сети. – frequent

+0

Я имел в виду: если 'foo.html' является сервером на сервере (который доступен для обоих клиентов), то, вероятно, наиболее легко настроить сервер ICE в этом месте. Было бы более интересно, если 'foo.html' прикрепляется в приложениях или локальный файл или обслуживается одним из двух« клиентов ». – Bergi

ответ

0

Вы посмотрите на эту

https://github.com/jed/browserver-client

Я думаю, что вы можете легко создать сервер HTTP с яваскрипт и отправлять сообщения из одного браузера в другой

С Nodejs может вы можете достичь того же.

+0

, но для установки подключения к сети, мне нужно «new eio.Socket ({host:« myserver.com »})' создание соединения, которое «брокеры», что я получаю и отправляю. Не работает - я ищу путь между Алисой и Бобом напрямую. – frequent

1

В то время как MDN documentation lists WebSocketServer в качестве клиентского API, я не думаю, что это точно (возможно, они хотели зарегистрировать там how to write a server).

На данный момент я не знаю стандартного способа создания серверного сокета в веб-браузере. Я знаю пару атак для сканирования локальной сети, но большинство из них полагаются на активный сервер вне сети, то есть вы подключаетесь к серверу и получаете обратно JavaScript, который открывает соединение WebSocket. Благодаря этому соединению я могу полностью контролировать клиент и открывать больше WebSockets с локальными IP-адресами для сканирования внутренней сети.

Если внутренний веб-сайты не implement CORS правильно (see here), я могу получить доступ ко всем внутренним веб-сайты, на которых текущий пользователь в настоящее время вошли в систему. Это хитрый вектор атаки, который позволяет внешним атакующим браузера внутренних документов без ничего растрескиванию , This page has a demo of the attack.

Даже вспышка won't let you create a server socket.

Если вы разрешаете Java-апплеты, а версия Java на клиенте очень старая или пользователь слепо щелкнул «ОК», то вы можете создавать серверные сокеты.

Похожие:

+0

много полезных вещей. Спасибо. – frequent

1

Это можно легко объяснить. Ответ - это невозможно. Для того, чтобы alice и bob могли вообще общаться без сторонних разработчиков, по крайней мере один из них должен прослушивать входящие соединения. Невозможно использовать только стандартный веб-браузер.

+0

В это время я согласился бы. Вы могли бы взломать что-то вместе, но это не было бы стандартным браузером. – nbering

3

Да, вы можете установить прямое соединение между двумя браузерами через локальную сеть с помощью WebRTC. Для этого требуется использование ICE, но не означает, что необходим внешний сервер STUN или TURN. Если браузеры находятся в одной сети, ICE будет успешным только с локальными кандидатами каждого браузера.

STUN/TURN необходим только для того, чтобы гарантировать, что две конечные точки могут устанавливать соединение, даже если они находятся в разных сетях и за NAT.

Фактически, если вы используете большинство приложений WebRTC (например, apprtc) с двумя браузерами, подключенными в локальной сети, ICE, скорее всего, будет выбирать и использовать пару локальных адресов. В этом случае будет выделено распределение каналов на сервере TURN, но оно не будет использоваться.

В вашем приложении WebRTC вы можете отключить использование STUN/TURN, передав пустые iceServers при создании PeerConnection.

+0

Спасибо, но я специально хотел знать, возможно ли это без ICE. Мне любопытно, какие существуют другие способы «послушать» что-то ... что угодно. – frequent