这可能是一个新手问题。我正在为没有ICE / TURN / STUN的环境开发SIP端点。 SIP端点将位于具有已知公共地址的NATing防火墙后面。我的端点可以从另一个可以位于防火墙内部或外部的端点直接拨打(无代理)。 我的端点如何检测传入的INVITE是来自防火墙内部还是外部的端点?需要将私有IP或公共IP置于Contact报头中以及SDP中的媒体描述中,其对INVITE的响应是200吗? 同样,它不是如何检测其公共IP,而是如何区分要发送回呼叫者的IP地址。 谢谢!
答案 0 :(得分:0)
没有通用的方法,它取决于防火墙,如果你使用相同的公共和私人接口。最好的办法是为公共和私人使用不同的公共和私人(以及不同的SIP提供商)接口。
如果远程方提供正确的Via,您可以使用Via标头。
如果你的防火墙允许,并且你知道一组IP肯定是私有的,你可以在NIST实现中获取传入消息的物理源IP,你可以将入站消息强制转换为gov.nist.javax.sip.message.SIPMessage
和使用getRemoteAddress()
然后使用您的应用逻辑检查地址。我想这就是你想要做的。我不推荐它,因为您的应用可能会发现自己位于自定义网络,ALG或其他标记提示的节点(例如X-Auth-IP
)之后。如果您将界面分开,那么您的应用程序将更加便携。