Webrtc 我可以使用本地候选ICE作为连接指示吗?

Webrtc 我可以使用本地候选ICE作为连接指示吗?,webrtc,Webrtc,我的任务是确定单个浏览器客户端的连接。我想知道发出的本地候选ICE是否表示客户端的连接。因此,检查来自谷歌STUN服务器的候选人: mid: audio, candidate: a=candidate:941443129 2 udp 1845501695 2.84.19.92 49669 typ srflx raddr 192.168.1.2 rport 49669 generation 0 我可以查看我的公共ip2.84.19.32,也可以查看NAT后面的本地ip192.168.1.2。此时

我的任务是确定单个浏览器客户端的连接。我想知道发出的本地候选ICE是否表示客户端的连接。因此,检查来自谷歌STUN服务器的候选人:

mid: audio, candidate: a=candidate:941443129 2 udp 1845501695 2.84.19.92 49669 typ srflx raddr 192.168.1.2 rport 49669 generation 0
我可以查看我的公共ip
2.84.19.32
,也可以查看NAT后面的本地ip
192.168.1.2
。此时,我还知道浏览器正在侦听UDP端口49669并等待连接。我是否可以推断STUN客户端已成功连接到我的公共ip和端口

我知道ICE的工作是确定是否可以连接到该候选者,但是否可以确定与单个客户端(浏览器)的连接


我的最终问题/任务是深入了解ICE过程,了解[单一]客户机是否支持NAT以及NAT的类型。这可能吗?

候选人的出现并不能说明你有连通性。但是如果你分析一下它们的内容,你可以得出一些结论。 您需要考虑您正在使用的昏迷/翻转服务器

  • 如果未定义任何内容,您仍然可以拥有候选设备,如果设备连接在网络中并且具有IP属性(即使网络无法访问Internet),则您将只拥有具有本地IP地址的候选设备
  • 如果您定义了一个服务器,并且您得到了除主机以外的其他类型的候选服务器,这意味着您有连接(至少连接到定义的STUN/TURN服务器,该服务器应该在您的机器之外)
要知道您是否支持NAT,您可以使用本地IP检查候选主机的存在


在你得到一个候选者后,这意味着主机:ip可以从互联网上访问。这就是联系外部眩晕/转身服务器的全部想法。就是打开那个端口。。。但是,它们是可访问的,这并不意味着你会受到攻击。实际上,您可以接收,但这是密钥协商进入的位置,并检查只有其他对等方(具有密钥的对等方)才能“建立”到该主机的连接:端口有两种方法可以从webRTC连接对象获取此数据:

pc.iceConnectionState, this tells you the connection process
pc.iceGatheringState, this is about the 'getting' of the ice candidates

但这两种方法似乎都不起作用,因为我在防火墙后面,防火墙会阻止RTC,但是
pc.iceConnectionState
仍然让我连接,但你可以试试看它是否对你有效。

你可以通过查看“typ”属性来确定它是哪种ice候选,如果它是“host”,那么它肯定在NAT后面,当它是“中继”时,它就在NAT之外。但是从外部STUN服务器(即谷歌)获取ICE候选服务器是否意味着可以通过主机上的internet访问我的主机:新候选服务器提供的ip?我的理解是,STUN/TURN与连通性无关,他们只会提供我的IP地址,在STUN服务器看到它时,以及一个中继服务器,以防定义了TURN服务器……我接受这一点,作为对“我可以通过阅读ICE确定连通性”问题的回答,正如@nakib所说的,答案是“不”。如果您定义了一个STUN服务器并从中获得了一个候选服务器,这意味着您已经连接到了网络(正如我所说的,至少连接到了该服务器)。这意味着您的主机:ip可以从internet访问。这就是联系外部服务器的全部想法。就是打开那个端口。。。但是,它们是可访问的,这并不意味着你会受到攻击。实际上,您可以接收,但这是密钥协商进入的位置,并检查只有其他对等方可以“建立”到该主机的连接:portI刚刚验证了ICE候选方确实报告了连接情况,如果您接收到候选主机,则意味着STUN服务器可以在该地址/端口/协议上连接。此发现已应用于www.check-connectivity.com,因此它将可靠地确定您是否接受传入的UDP/TCP连接