Android 2.3 SIP API 如何处理 NAT?

发布于 2024-11-04 13:48:26 字数 1042 浏览 0 评论 0 原文

我已经在 Android 2.3 中使用 SipDemo 一段时间了 SDK。

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 %20星 所以我不确定这是真的。至少对我来说,它不起作用。

但现在我的问题是: 当我将 SipDemo 按原样部署到连接到 WiFi 的设备时 或向模拟器提供我的凭据(我知道他们与 SipDroid 和其他 SIP 应用程序)SipDemo 显示“注册 失败的”。 我做了一些嗅探,发现发送到 SipServer 的数据包 全部包括设备或模拟器的本地 IP,而不是我的 NAT 的公共 IP 一。类似通过:SIP/2.0/UDP 192.168.0.106:53230 服务器正确回复不允许使用 RFC1918 IP。

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

我的问题: 有没有人曾经制作过使用 SIP API 的应用程序 网络地址转换? API 如何处理 NAT?我如何传递我得到的信息 从我自己的 STUN 客户端到 SIP API?

我知道 SipDroid 和许多其他 SIP 实现,但它们 全部不使用内置API。

For a while now I've been playing around with the SipDemo in the Android 2.3
SDK.

The documentation on Android's developer page is nicely written, but it's
not a lot. It does not explain anything about IPs, ports, NAT and STUN.
I know how this stuff is supposed to work, but it doesn't say how
Android's SIP API handles it. Or does it handle NATs at all...

Here, someone mentioned that the API does do some tests for public IP
and port, but it's the first time I read it:
http://code.google.com/p/android/issues/detail?id=14043&can=1&q=sip%20ip&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
So I'm not sure this is true. At least for me, it didn't work.

But now to my problem:
When I deploy the SipDemo as-is either to my device connected to WiFi
or to the emulator, provide my credentials (I know they work with
SipDroid and other SIP apps) the SipDemo displays "registration
failed".
I did some sniffing and found out the packets sent to the SipServer
all include the devices or emulators local IP, not my NAT's public
one. Something like Via: SIP/2.0/UDP 192.168.0.106:53230
The server replies correctly that RFC1918 IPs are not allowed.

I added a STUN test to the SipDemo and successfully retrieved my
public IP and port. But I can't find a way how to pass it on to my
created SipProfile or the SipManager.

My question:
Has anyone ever made an application working with the SIP API behind a
NAT?
How does the API handle NATs? How can I pass the information I got
from my own STUN client to the SIP API?

I know SipDroid and a lot of other SIP implementations, but they
all do not use the built-in API.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧人九事 2024-11-11 13:48:26

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

如果您使用对称 NAT,则没关系,因为将为出站 SIP 连接创建新的 NAT 绑定,因此您使用 STUN 收集的信息实际上并不可用。

您不应该担心 SIP API 的 NAT,服务器需要为您实现 NAT 穿越技术。

在某些情况下,您实际上可以从客户端执行某些操作:当使用 ICE 并且您选择自己的 TURN 服务器时,但我认为 Android 尚未实现 ICE 和 TRUN 支持。即使可以,您仍然需要部署 TRUN 服务器...

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

I added a STUN test to the SipDemo and successfully retrieved my
public IP and port. But I can't find a way how to pass it on to my
created SipProfile or the SipManager.

If you are behind symmetric NAT it doesn't matter, because a new NAT binding will be created for the outbound SIP connection, so the information you gathered with STUN is not really usable.

You shouldn't bother about NAT from a SIP API, the server needs to implement NAT traversal techniques for you.

There are cases in which you can actually do something from the client: when ICE is being used and you choose your own TURN server, but I don't think Android implements ICE and TRUN support yet. Even if it would, you'd still need to deploy a TRUN server...

Free services out there do implement NAT traversal techniques, you may try http://sip2sip.info for instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文