浏览器可以直接与同一网络上的其他浏览器通信吗?

时间:2014-11-26 12:00:31

标签: javascript html browser webrtc p2p

我试图找到一种方法在同一网络上的两个浏览器之间进行通信,以便在没有服务器往返的情况下建立WebRTC(没有STUN / ICE / TURN)。基本上是找到here方法的替代方法,其中"握手"通过复制/邮件/粘贴完成。

在筛选了我可以找到的所有跨浏览器通信示例(例如via cookiesWebTCP)以及关于SO的一堆问题(例如here),我&#39 ;回到想知道一件简单的事情:

问题
如果Alice和Bob在同一网络上访问同一页面foo.html并且他们彼此了解并且#39}内部分配的IP地址,有什么方法可以纯粹与浏览器上提供的内容进行通信?

这不包括Mozilla TCP_Socket_API之类的非标准API,但不包括所有"技巧"允许(img标签,iframe,cookies等)。

我只是好奇我是否可以在同一个网络上听某人"广播"通过浏览器的东西。

修改
foo.html将在静态服务器上,没有逻辑,没有ICE,没有快捷方式。

修改
仍然不是一个解决方案,但作为Chrome扩展的websocket服务器更接近。示例:almost pure browser serverless WebRTC

4 个答案:

答案 0 :(得分:3)

是的,您可以使用WebRTC在本地网络上建立两个浏览器之间的直接连接。它需要使用ICE,但意味着需要外部STUN或TURN服务器。如果浏览器在同一个网络上,ICE只会成功使用每个浏览器的本地候选者。

仅需要STUN / TURN以保证两个端点即使在不同的网络和NAT后面也可以建立连接。

事实上,如果您使用大多数WebRTC示例应用程序(例如apprtc)并在本地网络中连接两个浏览器,ICE最有可能选择并使用这对本地地址。在这种情况下,将在TURN服务器上进行通道分配,但不会使用它。

在WebRTC应用程序中,您可以在创建PeerConnection时通过传递空的iceServers来禁用STUN / TURN。

答案 1 :(得分:1)

虽然MDN documentation lists WebSocketServer作为客户端API,但我认为这不准确(可能他们希望在那里记录how to write a server)。

目前,我不知道在Web浏览器上创建服务器套接字的标准方法。我知道扫描本地网络的几次攻击,但大多数攻击都依赖于网络外的活动服务器,即连接到服务器并获取JavaScript,从而打开WebSocket连接。通过该连接,我可以完全控制客户端并让它打开更多带有本地IP地址的WebSockets来扫描内部网络。

如果内部网站没有implement CORS正确(see here),我可以访问当前用户当前登录的所有内部网站。这是一个允许的狡猾的攻击媒介外部攻击者浏览内部文件而不破解任何东西。 This page has a demo of the attack

即使是Flash won't let you create a server socket

如果您允许Java applet并且客户端上的Java版本很旧或者用户盲目地点击了#34; OK",那么您可以创建服务器套接字。

相关:

答案 2 :(得分:1)

这可以很容易地解释。答案是不可能的。为了使alice和bob在没有第三方的情况下进行通信,其中至少有一个需要监听传入的连接。单独使用标准Web浏览器是不可能的。

答案 3 :(得分:0)

你可以看看这个

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

我认为您可以使用javascript轻松创建一个http服务器,并将消息从一个浏览器发送到另一个浏览器

使用Nodejs,你可以实现同样的目标。