【问题标题】:JAIN SIP: Identify inbound IP for SIP message when listening on 0.0.0.0JAIN SIP:在 0.0.0.0 上侦听时识别 SIP 消息的入站 IP
【发布时间】:2015-02-06 13:50:08
【问题描述】:

当使用 JAIN SIP API 时,我创建了一个地址为 0.0.0.0 的 ListeningPoint 实例(即监听所有接口):

sipStack.createListeningPoint("0.0.0.0", 5060, "TCP");

我有没有办法确定传入 SIP 消息到达哪个 IP 接口(以便在响应消息中派生适当的联系人标头地址,以及其他用途)?

【问题讨论】:

    标签: java ip-address sip jain-sip


    【解决方案1】:

    收听 0.0.0.0 不是一个好主意,在某些情况下,SIP 堆栈也必须猜测要使用的地址,并且可能会猜错。我认为使用标准 API 无法判断地址,但您几乎总是可以使用实现中的私有 API。例如https://jsip.ci.cloudbees.com/job/jsip/javadoc/gov/nist/javax/sip/message/SIPMessage.html#getLocalAddress()

    您也可以通过 Via 标头等进行猜测。但同样不是一个好主意。

    【讨论】:

    • 感谢@VladimirRalev。我确实在早期调查了 Via 标头作为一种可能性,但没有在其中看到目标地址,至少在查看从远程方发送的 SIP 消息时(直接到我的端点)。我同意你的观点,尽管使用 0.0.0.0 通常不是一个好主意,并且可能会考虑重新考虑设计以避免这种情况。
    • 顺便说一句,即使不使用 0.0.0.0,而是使用特定的 IP 地址,如果我正在侦听多个传输,我如何确定请求到达哪一个?我什至找不到办法做到这一点,这似乎很奇怪。我不知道如何确定要在对 INVITE 的响应中发回的 Contact 标头。
    • 每个传输都应该有自己的 SipProvider,然后对于每个事件,您可以看到像这样的提供者 SipProvider sipProvider = (SipProvider) requestEvent.getSource();并查看它是您的 udp 还是 tcp 提供程序。检查 SIP 消息本身的 Via 标头也相当安全。
    • 感谢有关 getSource 方法的提示 - 错过了。不过,在 JAIN SIP 1.2 中,SipProvider 实现支持零到多个 ListeningPoints(每个所需传输一个),因此我无法从 SipProvider 实例确定传输。在上面添加我的评论后,我确实考虑过使用 Via 标头,这似乎有效,很高兴得到确认。感谢您的帮助!
    • 是的,API 允许多个监听点,但您只能在每个传输中使用一个。这就是在大多数 JAIN-SIP 应用程序中完成的方式。 Via 也非常可靠,只要确保您正确处理请求和响应的多个 Via 标头即可。
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多