【问题标题】:How does SDP in webrtc know candidate's ip?webrtc中的SDP如何知道候选人的ip?
【发布时间】: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能知道我的默认网关吗?

【问题讨论】:

    标签: webrtc sdp


    【解决方案1】:

    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 来找出您的默认网关。您可以通过编程方式自己找出答案。有一些系统调用将为您的设备提供路由表条目。或者在某些平台上,您需要读取特定的配置文件来获取这些条目。您可以解析这些条目以找出默认网关。请参阅以下问题和一些示例。

    How to get the WIFI gateway address on the iPhone?

    Default Gateway in C on Linux

    【讨论】:

    • 可以通过这些 API 调用获得网关地址吗?虽然亚历克斯说这是不可能的,但我在想是否有人试图找出 API 调用如何导致接口地址。
    • 我需要 WebRTC,因为我试图从浏览器中找到默认网关。 WebRTC 已用于从浏览器中找出publiclocal IP。尽管在接受的答案中指定的链接已失效,但您提供的第二个链接(通过 C 的默认网关)似乎很有希望。而且,正如您所建议的,我在想,如果 C 可以找到 IP 信息并且可以使用类似 asm.js 的浏览器编译,那么就不需要 WebRTC。
    【解决方案2】:

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

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

    【讨论】:

    • 好的。我想知道候选人的IP是如何收集的。我提到了 SDP,因为我们只有 SDP 向我们展示它。 PeerConnection 对象如何了解它?我想通过浏览器收集我的 IP 信息。因此,最好了解浏览器通常如何收集它们。哪些 IP 信息 onicecandidate 事件处理程序可以提供给我们?
    • @Anirban 就像 Alex 说的,候选人是通过浏览器收集的,你无法控制,你可以使用 onicecandidate 事件收集它,你可以轻松找到免费的眩晕服务器,只需添加它到创建新PeerConnection时的配置,然后收集的一些候选冰将是srflx类型,这些是从STUN获得的,基本上是你的外部ip
    【解决方案3】:

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

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

    【讨论】:

    • 此外,它还可以推断出您可能的网关地址,因为 99% 的网络将网关设置在 x.x.x.1 或其他一些“可能”且众所周知的地址。此外,可以(不使用 WebRTC)推断您的网络上正在使用哪些地址,但这并不能告诉您它是否是网关(尽管如上所述,可以猜到,并且您可以使用某些类型至少在家庭网络中检查该猜测的 IMG/etc 请求)
    • 我们不应该猜测接口信息。你能描述一下请求吗?最好确认一下这个猜测。
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2014-10-18
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多