RTCIceCandidate: address 属性

RTCIceCandidate 接口的只读 address 属性是一个字符串,提供设备的 IP 地址,该设备是候选者的来源。如果未另行指定,address 默认值为 null

address 字段的值是从传递给 RTCIceCandidate() 构造函数的 candidateInfo 选项对象设置的。您不能在选项对象中直接指定 address 的值,但如果它的格式正确,它的值会自动从对象的 candidate a 行中提取。

价值

提供候选者来源的 IP 地址的字符串。

注意:如果 portnull - 并且 port用户代理 支持 - 将候选者传递给 addIceCandidate() 将失败,并抛出 OperationError 异常。

安全注意事项

这里需要注意的是,虽然 WebRTC 不需要 RTCPeerConnection 上的两个对等方知道彼此的真实 IP 地址,但 RTCIceCandidate 上的 address 属性可以暴露比用户期望的更多关于远程对等方来源的信息。IP 地址可用于推断远程设备的位置、网络拓扑结构等信息。它还可以用于 指纹识别 目的。

候选者 IP 地址始终通过 address 公开给应用程序,而不良应用程序反过来可能会将地址公开给用户。这可以在没有远程对等方同意的前提下发生。

在构建时考虑用户隐私和安全的应用程序可以选择将允许的候选者限制为仅中继候选者。这样做可以防止远程用户的地址被暴露,但会减少可供选择的候选者池。为此,请使用符合 RTCPeerConnection.setConfiguration 中描述的 configuration 属性的对象配置 ICE 代理的 ICE 传输策略,如下所示

js
const rtcConfig = {
  iceServers: [
    {
      urls: "turn:myturn.server.ip",
      username: "username",
      credential: "password",
    },
  ],
  iceTransportPolicy: "relay",
};

通过将 iceTransportPolicy 设置为 "relay",任何主机候选者(IP 地址为对等方自身 IP 地址的候选者)以及任何不是中继候选者的其他候选者都将被排除在候选者池之外。

使用注意事项

考虑以下 SDP 属性行(a 行),它描述了 ICE 候选者

a=candidate:4234997325 1 udp 2043278322 192.0.2.172 44323 typ host

第五个字段 "192.0.2.172" 是此候选者 a 行字符串中的 IP 地址。

示例

此代码段使用 address 的值来实现基于 IP 地址的禁止功能。

js
if (ipBanList.includes(candidate.address)) {
  rejectCandidate(candidate);
} else {
  acceptCandidate(candidate);
}

规格

规格
WebRTC:浏览器中的实时通信
# dom-rtcicecandidate-address

浏览器兼容性

BCD 表仅在浏览器中加载