2016-08-01 21 views
1

これは初心者の質問かもしれません。私はICE/TURN/STUNを持たない環境のSIPエンドポイントを開発しています。 SIPエンドポイントは、既知のパブリックアドレスを持つNATファイアウォールの背後にあります。私のエンドポイントは、ファイアウォールの内側または外側のいずれかに配置できる別のエンドポイントから直接ダイヤルインできます(プロキシなし)。 着信INVITEがファイアウォールの内側または外側のエンドポイントから来たものであるかどうかをエンドポイントで検出できますか。これは、INVITEへの200応答で、プライベートIPまたはパブリックIPをContactヘッダーとSDPのメディア記述に入れるために必要ですか? 再び、公開IPを検出する方法ではなく、どのIPアドレスを発信者に返送するかを区別する方法です。 ありがとう!SIP応答 - プライベートIPまたはパブリックIPを含む?

答えて

0

一般的な方法はなく、ファイアウォールやパブリックとプライベートに同じインターフェイスを使用するかどうかによって異なります。最善の方法は、公衆と私的(そして異なるSIPプロバイダ)のために公衆と私設のために異なるインタフェースを使用することです。

リモート側から正しいViaが返された場合は、Viaヘッダーを使用できます。 ファイアウォールで許可されていることがわかっているIPのセットがプライベートであることがわかっている場合、NIST実装の受信メッセージの物理的な送信元IPを取得できます。受信メッセージをgov.nist.javax.sip.message.SIPMessageにキャストし、getRemoteAddress()あなたのアプリケーションロジックでアドレスを確認してください。私はこれがあなたがやろうとしていることだと思います。カスタムネットワーク、ALG、またはヒントをスタンプする他のノードの背後にあるアプリ(X-Auth-IPなど)にアプリが見つかる可能性があるので、私はそれをお勧めしません。インタフェースを分離すると、あなたのアプリケーションははるかに移植性が向上します。

関連する問題