当对等点不在 NAT 后面时,由于主机地址混淆,WebRTC 在现代浏览器中不起作用

2023-11-22

在对我的网络应用程序进行故障排除时,我发现草稿-mdns-ice-候选者,这是关于使用 mDNS 混淆候选主机中的地址。

我发现,当两个对等点(代理 L、代理 R)处于如下图 7 所示的拓扑时,WebRTC 对等点连接失败,因为代理 R 的主机地址被混淆,并且代理 R 的 srflx 地址被丢弃,因为代理 R 不在 NAT 后面。中的相关表述rfc8445关于丢弃代理 R 的 srflx 地址如下。

5.1.3.消除多余的候选人

接下来,ICE 代理(发起和响应)消除冗余 候选人。两个候选人可以具有相同的传输地址 不同的基础,这些不会被认为是多余的。 通常,服务器自反候选者和主机候选者将是 当代理不在 NAT 之后时是冗余的。候选人是 冗余当且仅当其传输地址和基址等于这些 另一位候选人的。代理应该消除多余的 优先级较低的候选人。 -rfc8445 第 5.1.3 节


Figure 7

(图7来自rfc8445 第 15.1 节)

And in 草案 mdns-ice-candidates 第 5 节,我没有找到关于图7的情况的解释。当我测试最新版本的Chrome、Firefox和Safari时,在图7的情况下,WebRTC对等连接在所有浏览器中都失败,原因是我上面写的— 代理 R 的主机地址被混淆,代理 R 的 srflx 地址被丢弃。

通过更改浏览器设置关闭本地地址混淆(默认情况下进行混淆)时,WebRTC 对等连接已成功建立。 (我在 Chrome 和 FireFox 上测试了此成功连接。在 Chrome 中,通过禁用Anonymize local IPs exposed by WebRTC在“关于:标志”页面中。在 Firefox 中,通过设置false media.peerconnection.ice.obfuscate_host_addresses在“关于:配置”页面中。)

这是 IETF 的 WebRTC 规范的问题吗? (也许之间发生碰撞草稿-mdns-ice-候选者 and rfc8445?)还是现代浏览器的实现问题?有没有办法在图7的情况下建立WebRTC对等连接而不关闭混淆主机地址?我想知道。


好消息!

实施中的这个错误是fixed通过上游 WebRTC 存储库中的补丁(这是我的贡献!):https://webrtc.googlesource.com/src/+/7eea6672285f765599fd883a5737f5cae8d20917

应用了补丁的上游 WebRTC 代码开始包含在 Chromium 上版本 110.0.5452.0. Thus 所有 Chromium 浏览器(包括 Chrome)版本或更高版本110.0.5452.0应该应用补丁。

自补丁提交以来upstream WebRTC 存储库, 我们还可以预期其他浏览器(如 Firefox 或 Safari)迟早会应用该补丁.


UPDATE:

上游补丁是Webkit 中精选的.

事实证明,对于 Firefox,一个单独的补丁是需要的。 (这个补丁也是我的贡献。) Firefox其 ICE 堆栈使用与上游 WebRTC 不同的库。因此,在上游应用补丁对 Firefox 不起作用。 (关于这一点,有趣的是 Firefox 也有同样的错误。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当对等点不在 NAT 后面时,由于主机地址混淆,WebRTC 在现代浏览器中不起作用 的相关文章

随机推荐

  • 如何启用表单上的所有控件?

    目前 我在启动时禁用了表单的大部分控件 因为在加载文件之前您无法使用它们 然而 一旦文件被加载 控件就应该被启用 我正在使用绑定 但我认为它们不是一个好的解决方案 其一 这是不必要的复杂性 其次 你不能对所有事情都使用绑定 例如 MenuS
  • 如何在python中使用Matlab的imresize

    我正在转移Matlab的imresize代码写入Python 我找到了 scipy 的imresize 但我从 Matlab 得到了不同的结果 如何通过python得到与Matlab相同的结果 Python scipyimresize fr
  • “脏话”过滤器[关闭]

    Closed 这个问题是无关 目前不接受答案 不是很技术性 但是 我必须在我们正在开发的新网站中实现坏词过滤器 所以我需要一个 好 坏词列表来为我的数据库提供 任何提示 方向 用谷歌环顾四周我找到了这个一个 这只是一个开始 但仅此而已 是的
  • Cocoa Core Data 新手指南

    我是众多热衷于尝试 Mac OS X 开发的未经洗礼的 NET 开发人员之一 目前我正在尝试弄清楚 Cocoa 的各种元素 但在核心数据上有点卡住了 我注意到 Web 上提供的大多数文档和资源都涉及广泛的端到端教程 从模型 生成类 基于文档
  • 如何在 pandas DataFrame 中存储公式而不是值

    是否可以像使用 Excel 电子表格一样使用 pandas DataFrame 例如 通过在列中输入公式 以便当其他列中的变量发生变化时 该列中的值会自动更改 就像是 a b c 2 3 a b 所以当我更新 2 或 3 时 该列c也会自动
  • 如何将一个字符串与另一个字符串进行比较,其中字符串之间有空格

    如何比较这两个字符串 val a fit bit versa val b fitbit 另一个例子 val a go pro hero 6 val b gopro 另一个例子 val a hero go pro 6 val b gopro
  • 将 RecyclerView CardView 单击的项目数据传递给 Activity

    我有一个关于将点击的卡片视图数据传递给活动的问题 这里是完整的故事 我有一个名为 Details 的 Activity 它的布局 Title 和 Description 中包含 2 个 TextView 我设置了一个片段 tab 1 其中包
  • 什么是CSS滚动行为属性?

    我最近注意到一个scroll behavior我可以在 css 中指定的属性 它只能有 2 个属性 inherit and initial 我以前从未听说过 见过它 所以我尝试看看它 问题是所有的链接都在解释不同的事情overflow财产
  • Python 3:何时使用字典,何时使用元组列表?

    I have id例如 监狱里的囚犯 每个囚犯都有一个名字 我知道字典如何工作 我知道元组如何工作 我知道列表如何工作 但有时我看到正在使用字典 有时看到元组列表 在我的情况下我应该使用哪一个 d 1 Mike 2 Bob 3 Tom vs
  • 如何更改 Node.js 中的默认目录? (视窗)

    当我尝试在节点上运行我的项目时 我必须编写 javascript 文件的完整路径 因为节点使用的默认值是C Users MyUser我拒绝使用它 我一直在尝试寻找如何改变这一点 但没有在任何地方找到它 我什至尝试手动搜索目录 但没有找到它
  • 为什么 .NET 程序能够在损坏的堆栈中幸存下来? (当使用错误的调用约定时)

    在VS2010中 托管调试助手会给你一个pInvokeStackImbalance异常 pInvokeStackImbalance MDA 如果您使用错误的调用约定调用函数 通常是因为您在调用 C 库时没有指定 CallingConvent
  • 我需要查看 HTML 图像地图区域

    我试图在我的图像上设置一个地图区域 但我希望它是一个八边形 所以我真的需要看看我正在绘制的内容 不幸的是 我无法设置区域标签的样式 以便我可以看到映射发生的位置 这使得我很难绘制这些区域 我每次都必须用鼠标跟随它才能知道它从哪里开始和在哪里
  • Cleartool:如何将标签应用于仅在我当前视图中的文件?

    我找不到正确的命令来将标签应用于当前视图中的文件 我尝试过以下命令 cleartool mklabel r TEST LABEL vob test a 但是 问题是该命令将应用 Test Label 为 中的每个文件添加标签vob test
  • 将 NOT IN 转换为 NOT EXISTS

    在理解 NOT EXISTS 的用法时经历了一场噩梦 主要是如何转换下面的 NOT IN 解决方案 以便我能够真正理解我是如何实现结果的 在askTom oracle 论坛和stackoverflow 上有几篇文章 但找不到任何明显有助于理
  • python3中的sys.stdout.write在字符串末尾添加11

    有人可以解释为什么吗sys stdout write 追加11到我的绳子 python3 Python 3 4 3 default Jul 28 2015 13 17 50 GCC 4 9 3 on linux Type help copy
  • 在身份验证库中找不到 GoogleSignIn 类

    我在通过 Android 应用程序登录 Google Play 时遇到问题 我补充道 编译 com google firebase firebase auth 11 4 2 和 编译 com google android gms play
  • Windows 任务管理器中的“转储文件”是什么?

    我知道在 Windows 中 您可以通过转到任务管理器 gt 进程 gt 右键单击进程来生成转储文件 什么是转储文件 我可以用 dmp 文件做什么 dmp 文件是Minidump 实时进程的快照 包含有关其当前状态的信息 包括内存 堆栈跟踪
  • 最大化 $digest 迭代

    我正在玩弄指令和 在此绑定fiddle 我收到以下错误 Uncaught Error 10 digest iterations reached Aborting Watchers fired in the last 5 iterations
  • @"some string" 在 Objective-C 中是什么意思?

    我刚刚开始 iphone 开发 遇到了一些使用 somestring 的示例代码 someLabel txt string of text 为什么字符串需要 我猜这是创建对象的某种快捷方式 它使用该字符串创建一个 NSString 对象 而
  • 当对等点不在 NAT 后面时,由于主机地址混淆,WebRTC 在现代浏览器中不起作用

    在对我的网络应用程序进行故障排除时 我发现草稿 mdns ice 候选者 这是关于使用 mDNS 混淆候选主机中的地址 我发现 当两个对等点 代理 L 代理 R 处于如下图 7 所示的拓扑时 WebRTC 对等点连接失败 因为代理 R 的主