Я разрабатываю веб-приложение с Java-сервлетом, я надеюсь получить информацию об IP-адресе пользователя, вызвав request.getRemoteAddr() изнутри processRequest(HttpServletRequest request,HttpServletResponse response).
Но он возвращает неправильный IP. Поскольку я не очень разбираюсь в этой области, я не знаю, что она отображает, может быть, прокси, я получил следующее:
RemoteAddr : 127.0.0.1 RemoteHost : 127.0.0.1 x-forwarded-for : null
127.0.0.1 не мой IP.
Тем не менее, когда я перейду к: http://www.javascriptkit.com/script/script2/displayip.shtml, он отобразит правильный, поскольку я использую сервлет, у меня нет .shtml для моей динамически сгенерированной html-страницы, что я могу сделать? И почему скрипт на этом сайте может отображать его правильно, а request.getRemoteAddr() - нет?
Спасибо за все ответы, теперь у меня есть подсказка, после развертывания на сервере он работает, как ожидалось. Показал правильный адрес.
Но даже когда я разрабатываю его на своем локальном компьютере, как попросить его отображать абсолютный IP-адрес, как если бы он работал на реальном сервере? Или это выполнимо?




Какой IP-адрес отображается? Я предполагаю, что есть какой-то прокси или что-то меняющее. (Например, на этой странице сценария по понятным причинам отображался IP-адрес моего ADSL-маршрутизатора, а не тот, который находится в моей локальной сети.)
Обновлено: Теперь, когда вы показали, что IP-адрес, который вы видите, 127.0.0.1, ответ довольно ясен - вы видите свой адаптер обратной петли (т.е. ярлык для той же машины), предположительно потому, что вы тестируете на на той же машине, на которой вы работаете. Ответ совершенно правильный.
Попробуйте использовать его на другом компьютере, и вы получите более полезный IP-адрес.
Это тоже будет моим вопросом. Вы просто печатали быстрее. :)
Проверьте заголовок X-Forwarded-For, вызвав request.getHeader («X-Forwarded-For»), и посмотрите, какой IP он возвращает.
Мы используем этот заголовок, и если он недоступен, используем request.getRemoteAddr ()
Возвращенный IP-адрес, который вы показываете, является IP-адресом локального хоста. Возникает вопрос - где вы тестируете и как вы получаете доступ к сервлету для тестирования?
Если вы запускаете сервлет на своем локальном (разрабатываемом) компьютере, а также вызываете его из браузера на том же компьютере, то этот вывод абсолютно верен.
Ваше здоровье,
-Р
Вы запускаете свой тестовый сервер на локальном компьютере и подключаетесь к нему по http: // localhost /. Поскольку вы подключаетесь через локальный интерфейс, источником подключения также является localhost, он же 127.0.0.1.
Если вы вызываете свой сервлет с помощью http: // локальный: 8080 / сервлет, вы обычно получаете "localhost" в качестве удаленного адреса. Если вы используете имя своего компьютера, то есть http: // yourmachine / сервлет, вы обычно получаете «правильный» адрес.
Когда вы говорите
wrong ip, это адрес в вашем домене? Насколько это неправильно? Не могли бы вы дать нам дополнительную информацию о том, что возвращает вызов является?