2015-09-21 38 views
1

Candidate屬性在SDP中提供候選人的連接地址。它看起來像這樣:webrtc中的SDP如何知道候選人的IP?

a=candidate:4022866446 1 udp 2113937151 192.168.0.197 36768 typ host 

我想知道如何SDP收集關於我的本地IP信息。

如果有任何特定的webrtc代碼需要查看,這將非常有幫助。而且,如果有可能查看本地IP,sdp可以知道我的默認網關嗎?

回答

0

它被稱爲「冰塊聚集」,它在瀏覽器內部完成。

瀏覽器不知道你的網關,但如果你使用STUN服務器,它會知道你的公共IP。當你創建一個PeerConnection對象

+0

此外,它可以推斷出自己可能的網關地址,隨着網絡的99%,把網關在x.x.x.1或其他一些「可能」和著名的地址。另外,有可能(沒有WebRTC)推斷網絡中正在使用哪些地址,雖然它不會告訴你它是否是網關(儘管按照上面的說法,這是可以猜到的,並且可以使用某些類型IMG/etc要求檢查猜測,至少在家庭網絡中) – jesup

+0

我們不應該猜測接口信息。你能描述請求嗎?這是很好的證實猜測。 – Anirban

1

,它收集所有可能的冰候選人(地址通過遠程端可以達到你),你必須使用PeerConnection.onicecandiate事件處理程序來收集他們,並通過他們的遠程端通過信令服務器。

其中有些候選人會反思本地生成的sdp,他們不是sdp的必備部分,sdp的主要目的是描述你正在共享的mediasteam。

+0

好的。我想知道如何收集候選人的知識產權。我提到了SDP,因爲我們只有SDP向我們展示它。 PeerConnection對象如何瞭解它? 我想通過瀏覽器收集我的IP信息。因此,瞭解瀏覽器通常如何收集這些信息是很好的。 onicecandidate事件處理程序可以爲我們提供哪些IP信息? – Anirban

+1

@Anirban像Alex說的,候選人通過瀏覽器收集,你無法控制,你可以使用'onicecandidate'事件收集它,你可以很容易地找到免費的眩暈服務器,只需將它添加到配置時創建新的PeerConnection ,那麼一些收集的候選冰將是** srflx **類型,這些都是從STUN獲得的,這基本上就是你的外部IP – mido

2

WebRTC爲您提供一些API。你看不到下面發生了什麼。您可以調用特定的API,並在內部SDK完成其工作,在這種情況下收集您的IP信息。

有3種類型的候選主機,服務器反射(公共地址)和中繼地址。

主候選人是您的接口地址。接口地址通過一些系統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

+0

這些API調用可以實現網關地址嗎? 雖然亞歷克斯說這是不可能的,但我想如果有人試圖找出如何API調用結果在接口地址。 – Anirban

+0

我已經編輯了關於你的問題的答案。 – Tahlil

+0

我需要WebRTC,因爲我試圖從瀏覽器中找到默認網關。 WebRTC已被用於從瀏覽器中找出[public](http://ipcalf.com/)和[local](http://net.ipcalf.com/)IP。 您提供的第二個鏈接(通過C的默認網關)似乎很有希望,儘管接受的答案中指定的鏈接已死亡。而且,正如你所建議的那樣,我在想,如果C可以找到IP信息,並且可以使用類似[asm.js](http://programmers.stackexchange.com/questions/197940/how-運行C代碼在瀏覽器中使用asm-js),那麼WebRTC將不再需要。 – Anirban

相關問題