【发布时间】:2015-12-17 16:33:30
【问题描述】:
SDP 中的Candidate 属性提供候选的连接地址。看起来像这样:
a=candidate:4022866446 1 udp 2113937151 192.168.0.197 36768 typ host
我想知道 sdp 是如何收集我本地 ip 的信息的。
如果有任何特定的 webrtc 代码可供查看,那将非常有帮助。而且,如果可以查看本地IP,sdp能知道我的默认网关吗?
【问题讨论】:
SDP 中的Candidate 属性提供候选的连接地址。看起来像这样:
a=candidate:4022866446 1 udp 2113937151 192.168.0.197 36768 typ host
我想知道 sdp 是如何收集我本地 ip 的信息的。
如果有任何特定的 webrtc 代码可供查看,那将非常有帮助。而且,如果可以查看本地IP,sdp能知道我的默认网关吗?
【问题讨论】:
WebRTC 为您提供了一些 API。你看不到下面发生了什么。您调用特定的 API,SDK 在内部完成其工作,在这种情况下收集您的 ip 信息。
有3种候选Host,Server Reflexive(public address)和relay address。
Host Candidate 是你的接口地址。接口地址通过一些系统 API 调用收集,并且为每个接口创建和绑定一个套接字以获取端口。
由于 WebRTC 内部使用 ICE、STUN 和 TURN 协议,服务器自反和中继候选收集有特定的规则要遵循。
为了在内部收集服务器自反候选(NAT的公共IP:端口),一个STUN消息被发送到STUN服务器,响应消息包含映射/异或映射地址。这就是收集服务器反身地址的方式。
为了收集中继候选,向 TURN 服务器发送 TURN 分配请求,响应消息包含中继地址。 TURN 消息响应也包含服务器反身地址。所以如果你有 TURN 服务器,那么你就不需要 STUN 服务器了。
编辑:
我认为没有 WebRTC API 可以帮助您。
您不需要 WebRTC 来找出您的默认网关。您可以通过编程方式自己找出答案。有一些系统调用将为您的设备提供路由表条目。或者在某些平台上,您需要读取特定的配置文件来获取这些条目。您可以解析这些条目以找出默认网关。请参阅以下问题和一些示例。
当你创建一个PeerConnection 对象时,它会收集所有可能的ice 候选对象(远程对等点可以到达你的地址),你必须使用PeerConnection.onicecandiate 事件处理程序收集它们并将它们传递给远程对等点信令服务器。
其中一些候选人会反映本地生成的 sdp,它们不是 sdp 的强制性部分,sdp 的主要目的是描述您正在共享的 mediasteam。
【讨论】:
onicecandidate 事件收集它,你可以轻松找到免费的眩晕服务器,只需添加它到创建新PeerConnection时的配置,然后收集的一些候选冰将是srflx类型,这些是从STUN获得的,基本上是你的外部ip
它被称为“冰收集”,它在浏览器内部完成。
浏览器不知道您的网关,但如果您使用 STUN 服务器,它会知道您的公共 IP。
【讨论】: