webrtc中的SDP如何知道候选人的IP?

时间:2015-09-21 04:29:44

标签: webrtc sdp

SDP中的

Candidate属性提供候选的连接地址。看起来像这样:

a=candidate:4022866446 1 udp 2113937151 192.168.0.197 36768 typ host

我想知道sdp如何收集有关我本地IP的信息。

如果有任何特定的webrtc代码可以查看,那将是非常有用的。而且,如果可以查看本地IP,sdp可以知道我的默认网关吗?

3 个答案:

答案 0 :(得分:2)

WebRTC为您提供了一些API。你无法看到下面发生了什么。您可以调用特定的API,在SDK内部完成其工作,在这种情况下收集您的IP信息。

有三种类型的候选主机,服务器自反(公共地址)和中继地址。

主持人候选人是您的接口地址。通过一些系统API调用收集接口地址,并为每个接口创建并绑定一个套接字以获取端口。

由于WebRTC内部使用ICE,STUN和TURN协议,服务器反身和中继候选人收集具有特定的规则。

要在内部收集服务器自反候选(NAT的公共IP:端口),STUN消息将发送到STUN服务器,并且响应消息包含映射/ XOR映射地址。这是收集服务器自反地址的方式。

要收集中继候选者,TURN分配请求将发送到TURN服务器,响应消息包含中继地址。 TURN消息响应也包含服务器自反地址。因此,如果您有TURN服务器,那么您不需要STUN服务器。

编辑:

我不认为WebRTC API可以帮助您解决这个问题。

您不需要WebRTC来查找默认网关。您可以通过编程方式自行查找。有一些系统调用将为您的设备提供路由表条目。或者在某些平台中,您需要读取特定的配置文件以获取这些条目。您可以解析这些条目以找出默认网关。通过一些例子,请参阅以下问题。

How to get the WIFI gateway address on the iPhone?

Default Gateway in C on Linux

答案 1 :(得分:1)

每当你创建一个PeerConnection对象时,它会收集所有可能的候选冰块(远程对等体可以通过它到达的地址),你必须使用PeerConnection.onicecandiate事件处理程序收集它们并传递它们远程对等体通过信令服务器。

其中一些候选人会反思本地生成的sdp,它们不是sdp的强制性部分,sdp的主要目的是描述你正在分享的mediasteam。

答案 2 :(得分:0)

它被称为“冰收集”,它在浏览器内部完成。

浏览器不知道您的网关,但如果您使用STUN服务器,它将知道您的公共IP。