2011-05-02 99 views
3

有一段时间了,我一直在玩Android 2.3 SDK中的SipDemo。Android 2.3 SIP API如何处理NAT?

Android的开发者页面上的文档写得很好,但它的 不是很多。它没有解释有关IP,端口,NAT和STUN的任何信息。 我知道这些东西应该如何工作,但并没有说明Android的SIP API如何处理它。或者它处理的NAT在所有...

这里,有人提到,API确实做公网IP 和端口一些测试,但它是我第一次读它: http://code.google.com/p/android/issues/detail?id=14043&can=1&q=sip%20ip&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars 所以我不知道这是真的。至少对我而言,这不起作用。

但现在我的问题: 当我部署SipDemo作为,要么是我的设备连接到WiFi 或仿真器,提供我的凭据(我知道他们有 SipDroid和其他SIP应用工作)的SipDemo显示“注册 失败”。 我做了一些嗅探,发现发送到SipServer的数据包 都包含设备或模拟器的本地IP,而不是我的NAT的公众 之一。类似Via:SIP/2.0/UDP 192.168.0.106:53230 服务器正确答复RFC1918 IP不被允许。

我向SipDemo添加了STUN测试,并成功检索了我的 公共IP和端口。但我找不到如何将它传递给我创建的SipProfile或SipManager的 。

我的问题: 有没有人有过使用SIP API在 NAT后面工作的应用程序? API如何处理NAT?如何将我从我自己的STUN客户端获得的信息 传递给SIP API?

我知道SipDroid和很多其他的SIP实现,但他们 都不使用内置的API。

回答

0

我加了STUN测试到SipDemo并成功取回我的 公网IP和端口。但我找不到如何将它传递给我创建的SipProfile或SipManager的 。

如果您位于对称NAT之后,则无关紧要,因为将为出站SIP连接创建新的NAT绑定,因此您使用STUN收集的信息并不真正可用。

你不应该在SIP API上打扰NAT,服务器需要为你实现NAT穿越技术。

有些情况下,你可以真正从客户端做些事情:当ICE被使用并且你选择了你自己的TURN服务器,但我不认为Android实现ICE和TRUN支持。即使它会,你仍然需要部署一个TRUN服务器...

那里的免费服务确实实现了NAT穿越技术,你可以尝试http://sip2sip.info例如。