2016-08-01 2 views
1

Это может быть вопрос новичков. Я разрабатываю конечную точку SIP для среды, в которой не будет ICE/TURN/STUN. Конечная точка SIP будет находиться за брандмауэром NATing с известным общедоступным адресом. Моя конечная точка может набираться напрямую (без прокси) с другой конечной точки, которая может быть расположена либо внутри, либо вне брандмауэра. Как моя конечная точка может определить, находится ли входящее INVITE от конечной точки внутри или вне брандмауэра? Это необходимо, чтобы включить либо закрытый, либо публичный IP-адрес в заголовке Contact и в описании мультимедиа в SDP в ответе 200 на INVITE? Опять же, это не то, как определить свой публичный IP-адрес, а как определить, какой IP-адрес отправить обратно вызывающему. Спасибо!Ответ SIP - включает частный или публичный IP-адрес?

ответ

0

Существует не общий способ, и это зависит от брандмауэра, и если вы используете тот же интерфейс для публичных и частных. Лучший способ - использовать различные интерфейсы для публичных и частных (и разных поставщиков sip) для публичных и частных.

Если удаленные стороны дают правильное значение Via, вы можете использовать заголовок Via. Если ваш брандмауэр разрешает, и у вас есть набор IP-адресов, которые, как вы знаете, будут конфиденциальными, вы можете получить физический IP-адрес источника входящих сообщений в реализации NIST, вы можете включить входящие сообщения в gov.nist.javax.sip.message.SIPMessage и использовать getRemoteAddress(), затем проверьте адрес с помощью логики вашего приложения. Я думаю, это то, что вы пытаетесь сделать. Я не рекомендую это, потому что ваше приложение может оказаться в пользовательских сетях, ALG или за другими узлами, которые печатают подсказки (например, X-Auth-IP). Приложение будет гораздо более портативным, если вы разделите интерфейсы.

Смежные вопросы