webrtc candidate xxx.local mDNS ip地址問題


版權聲明:轉載請附上原文出處鏈接及本聲明。     原文鏈接:https://www.cnblogs.com/mangshe0/p/12108400.html

如果你也遇到了類似 這種問題:

 

先說解決辦法:   chrome://flags/#enable-webrtc-hide-local-ips-with-mdns 中將 Anonymize local IPs exposed by WebRTC. 選項設置成disable 即可恢復原來ip地址, 不再使用 xxx.local地址.

 

 

后面都是自個原因分析的小記,沒啥用不用看。

-------------------------------------------------- 起因:

最近用jssip開發個小demo,用來自己測試使用。

遇到了 web-發起invite時候 sdp中
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:89174025 1 udp 2113937151 50c6594a-c1f8-43dd-9370-01b8976daa4c.local 49997 typ host generation 0 network-cost 999
語音通訊地址 IPV4是0, ice-candidate中使用 ipv6.

我就無語了 前端時間用還好使。
chrome.exe -disable-ipv6 也不行.
暫時先在onSDP事件時候 sdp.replace 手動修改ip地址 解決該問題.

 

-------------------------------------------------- 原因分析

終於解決了 之前遺留的問題,困擾我好久,用了好幾天的時間,有時間有點思路就分析 找找.
首先之前的分析是正確的,就是手欠升級chrome導致的,

IP4地址是0.0.0.0, 說明媒體通訊時不使用這里,而是使用candidate中描述的地址,
這里candidate描述的地址為  50c6594a-c1f8-43dd-9370-01b8976daa4c.local,
我當初一直誤以為是IPV6的地址,這個誤區里掙扎了好久.
嘗試將fs配置成IPV6與之進行通訊,發現仍然不行,這根本就不是個IP地址。

翻了翻歷史版本的數據抓包, sdp描述的相關信息都差不多,唯獨以前寫IP地址的地方被換成了xxx.local 這個鬼玩應。
本地環境測試 我還可以重寫sdp來繞過去,但是生產環境 nat穿個幾層,那怎么搞? 所以必須得把這個問題解決了。
回退chrome雖然可以暫時解決,但是這個技術盲點,將來遲早要遇到的,啥也不說了繼續研究吧。

搜索引擎檢索的信息都幾乎不沾邊,沒有捷徑 前人的幫助,只能一點點翻ietf官方標准了。
https://tools.ietf.org/html/draft-wang-mmusic-encrypted-ice-candidates-00#ref-MdnsCandidate
果不其然,在IETF的草案當中 draft-wang-mmusic-encrypted-ice-candidates,終於找到了encoded_encrypted_address.local
這種結構地址的描述。

太着急了沒有仔細看,誤以為是IP地址被加密導致,
https://www.w3.org/TR/webrtc/#rtcicecandidate-interface 根據RTCPeerConnection candidate接口
又返回到jssip中去查設置ip地址加密的相關屬性,結果肯定是沒有。。。
https://jssip.net/documentation/3.3.x/api/session/#event_icecandidate

再回到ietf草案當中 定睛一看, 加密后的IP地址都是.encrypted這種格式的,
.local是屬於mDNS, mDNS 這事個什么鬼,跟dns有啥關系啊?
https://tools.ietf.org/html/rfc6762  Multicast DNS
mDNS用於處理本地網絡中機器名稱,而不需要DNS服務器,
大致意思就是 本地網絡中的機器會隨機產生唯一名字類似 50c6594a-c1f8-43dd-9370-01b8976daa4c.local,
網絡中其他的機器想要與之通訊 會進行mDNS廣播查詢, 這個名稱的機器收到后會回復其IP地址.

新版本的webrtc,我目前是 79.0.3945.88(正式版本), NND就是用了這個功能,替代了原有IP地址。
因為google webrtc 的ip地址之前是直接暴漏的,一直被大家吐槽, 現在用了這個mDNS功能,將IP給隱藏起來了。。
想必很多不支持這個mDNS功能的webrtcServer都被這個功能給搞的不能通訊。

並且目前W3C webrtc接口中沒有這方面的設置,
https://www.w3.org/TR/webrtc/#rtcicecandidate-interface
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addIceCandidate

雖然google強制開啟使用mDNS功能, 還好有個開關,
chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
折騰了我好幾天, 就是這么一個配置。 我一個做服務器的就為了搞個測試demo, 太不容易了。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM