有没有办法在具有3G/4G连接的Android上使用UPnP进行NAT遍历,如果是这样,它是否依赖于运营商?
不,暂时没有办法做到这一点,原因很简单,移动运营商不使用住宅级NAT——他们拥有的是"运营商级NAT"CGN,见这里 http://en.wikipedia.org/wiki/Carrier-grade_NAT,这些设备与住宅网关具有非常不同的端口分配和管理机制。
请参阅此集合中的运营商级 NAT (CGN) 相关文档:http://www.scribd.com/collections/3292450/P2P
附言目前有一个类似UPnP的协议正在考虑用于CGN,即"端口控制协议"(PCP),请参阅此处:https://datatracker.ietf.org/doc/html/draft-ietf-pcp-base-29
Cling有Android特定的类来做UPnP,从论坛消息及其文档的外观来看,它应该可以工作。我目前正在PC上测试它,但最终我选择了它,因为他们支持Android。我将在一两天内在这里发布我的测试结果。
检查保鲜核心,尤其是支持库。在最基本的级别上,您只需要 4 行代码即可进行端口映射。
[更新] Android 的 Cling 文档指出,它只允许绑定到 Wi-Fi 接口,因此无法在蜂窝数据连接上进行端口映射(至少在 Cling 版本 1.0.5 中)
与其尝试使用 uPnP(这是一种安全风险,因为它租用未映射的端口打开),您可能希望使用 STUN 获取公共 IP/端口,然后建立 UDP 连接,您可以通过该连接通过 psudo-TCP,或者使用 TURN 服务器。对于运营商级 NAT,如果您不想为中继付费,还有这种技术,有时可能会起作用:
https://drive.google.com/file/d/0B1IimJ20gG0SY2NvaE4wRVVMbG8/view?usp=sharing