【webrtc】Chrome和Firefox在SDP协商过程中,针对localhost的不同处理

内网下chrome端webrtc协商失败

现象

我有一个webrtc服务器在局域网内,使用chrome浏览器访问时,发现webrtc在做媒体协商时失败。

具体表现是,在交换sdp后,ice的状态是oniceconnectionstatechange: failed

但是换成Firefox浏览器时,媒体沟通就成功了,语音可以正常发送。

分析

对比一下两者的sdp的区别
下面是Chrome 准备的candidate

 {"candidate":"candidate:3173604209 1 udp 2113937151 e4a90cba-1bbb-4f52-a637-b19c53879494.local 53121 typ host generation 0 ufrag 8jU2 network-cost 999","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"8jU2"}

而Firefox 准备的candidate就多了

onIceCandidate:
{"candidate":"candidate:0 1 UDP 2122252543 192.168.56.1 53785 typ host","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
}onIceCandidate: 
{"candidate":"candidate:2 1 UDP 2122187007 192.168.35.14 53786 typ host","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
}onIceCandidate: 
{"candidate":"candidate:4 1 TCP 2105524479 192.168.56.1 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
} onIceCandidate: 
{"candidate":"candidate:5 1 TCP 2105458943 192.168.35.14 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
}

这里主要区别是似乎Chrome准备的candidate没有任何内网ip信息!

Google了一下,原来是为了Google为了解决Webrtc leaks问题(主要是因为webrtc协商过程中携带了内网信息,可能会成为安全隐患)所以在chrome中默认隐藏了。

刚才我们在chrome的candidate中看到的 e4a90cba-1bbb-4f52-a637-b19c53879494.local,就是隐藏的内网信息。那么这个xxxx.local别人怎么识别呢? 这里要提一下mDNS

什么是mDNS

mDNS(Multicast DNS,多播DNS)是一种基于DNS(域名系统)的协议,它允许局域网内的设备在没有传统DNS服务器的情况下相互发现和通信。mDNS使用组播技术,通过在局域网内发送广播消息来实现设备的发现和通信。它使用的默认端口是5353

mDNS的工作原理是,当一个设备加入到局域网中,如果它开启了mDNS服务,就会向局域网内的所有设备发送组播消息,告知自己的存在以及IP地址等信息。其他开启mDNS服务的设备接收到这些消息后,就可以响应并提供自己的信息。这样,局域网内的设备就可以通过mDNS相互发现并知道彼此的IP地址,从而实现通信。

mDNS的限制

它的本意是在访问公网时,把内网信息隐藏。 但是如果是纯内网环境,这个功能就是多此一举了。 另外,如果要其他设备支持,也必须支持mDNS才可以。

所以回到我遇到的问题,之所以chrome不可以,就是因为它使用mDNS来隐藏了自己的内网信息。而局域网中的服务器不支持mDNS,所以无法获取到它的真实地址。
而Firefox可以,是因为Firefox没有采用这种方案。

解决方案

那么如何在chrome里正常使用呢?

在chrome中输入 chrome://flags/ 然后找到Anonymize local IPs exposed by WebRTC 把它关掉,重启后就好了。
在这里插入图片描述

参考文档

https://bloggeek.me/psa-mdns-and-local-ice-candidates-are-coming/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/643553.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助力24五一杯数学建模比赛

完成助力美赛建模!!!!! 完成助力妈妈杯建模!!!! 完成助力华中杯建模!!!! 这边将在开赛后24小时内发布资料和初步思路 需…

ESP-IDF下载与安装完整流程

本文主要看参考官网说明,如下: Windows 平台工具链的标准设置 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 一、概述 ESP-IDF需要安装一些必备工具,才能围绕ESP32构建固件,包括: PythonGit交叉编译…

Swift-28-值和引用类型、内存管理以及objectivc与swift混合调用

本小节的内容稍有点多,这三块内容基本没太大关系,只是笔者想在这一节中把swift的oop收下尾,所以全写在一起了。 值类型和引用类型 和其它语言一样,函数调用时对于参数到底是指针引用还是类似String这样的值传递(不可变…

【MySQL】A01、性能优化-语句分析

1、数据库优化方向 A、SQL及索引优化 根据需求写出良好的SQL,并创建有效的索引,实现某一种需求可以多种写法,这时候我们就要选择一种效率最高的写法。这个时候就要了解sql优化 B、数据库表结构优化 根据数据库的范式,设计表结构&…

【计算机网络】(三)物理层 - 通信基础

文章目录 【计算机网络】(三)物理层 - 通信基础前言3.1 物理层的基本概念3.2 数据通信的基础知识3.2.1 数据、信号、码元3.2.2 信源、信宿、信道3.2.3 编码、调制3.2.3.1 基带调制(编码)3.2.3.2 带通调制(调制&#xf…

系统安全与应用(1)

目录 1、账号安全管理 (1)禁止程序用户登录 (2)锁定禁用长期不使用的用户 (3)删除无用的账号 (4)禁止账号和密码的修改 2、密码安全管理 设置密码有效期 1)针对已…

2024 年选择安全运营中心 (SOC) 工具指南

安全运营中心 (SOC) 是对抗网络威胁的前线。他们使用各种安全控制措施来监控、检测和快速响应任何网络威胁。这些控制措施对于确保信息系统全天候安全至关重要。 大型组织中的现代 SOC 与各种安全供应商合作,处理 75 到 100 种不同的工具。让我们探讨一下您可能遇到…

数据结构基础:链表操作入门

数据结构基础:链表操作入门 数据结构基础:链表操作入门链表的基本概念链表的基本操作输出链表插入节点删除节点查找值 完整的链表操作示例结语 数据结构基础:链表操作入门 在计算机科学中,数据结构是组织和存储数据的方式&#x…

图书租赁系统-借阅图书

图中展示了所有可以借阅的图书&#xff0c;点击“借阅”按钮便可以借阅图书。 借阅成功后&#xff0c;可以到bookorder菜单中阅读该书。 阅读功能待开发。 add.html借阅图书页面 <!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org…

笔记本电脑耗电和发热比较厉害怎么处理

工作中会遇到有同事反馈笔记本电脑耗电和发热比较厉害&#xff0c;主要检查以下几个地方 1、CPU频率 很多人觉得是cpu使用率高就代表电脑跑得快&#xff0c;发热量就大&#xff0c;其实不是的&#xff0c;主要是看的cpu频率&#xff0c;频率越高&#xff0c;电脑发热量越大。如…

[论文笔记] EcomGPT:COT扩充数据的电商大模型

社区供稿 | EcomGPT:基于任务链数据的电商大模型(附魔搭推理实践) - 知乎 https://arxiv.org/pdf/2312.15696.pdf EcomInstruct指令数据集构建 数据集组成 COT方式构造垂域训练数据:把原本的垂域任务分解成了原子任务,构造了基于解决原子任务的数据。这样能用类似…

【学习】服务器解决:重新分配同样端口号后,连不上VScode

原来服务器分配的环境有问题&#xff0c;重新分配了一下。还是同样的端口号&#xff0c;Xshell和xftp能够连接上&#xff0c;但是VScode连接不上。 问题解决: 清除本地 SSH 缓存中与远程主机相关的条目可以通过编辑 known_hosts 文件来实现。这个文件包含了您曾经连接过的远程主…