#java #javascript #jsp #jakarta-ee
#java #javascript #jsp #джакарта-ee
Вопрос:
У меня есть приложение, написанное на JSP и странице сервлета. Всякий раз, когда я пытаюсь отследить IP-адрес пользователя, он возвращает глобальный IP-адрес компьютера (адрес прокси-сервера), а не IP-адрес локальной сети этого компьютера. Итак, как получить IP-адрес локальной сети компьютера пользователя. Пожалуйста, помогите мне решить эту проблему…
Комментарии:
1. Находится ли ваш веб-сервер за пределами этой локальной сети?
2. @deceze: Не могли бы вы, пожалуйста, высказать свои соображения по поводу обоих случаев?. Но мой сервер расположен за пределами локальной сети. Что произойдет, если мой сервер расположен внутри локальной сети?
Ответ №1:
Попробуйте это для локальной машины…
1- InetAddress thisIp = InetAddress.getLocalHost();
примером результата будет abcNamePc/172.11.0.115
то, что он предоставит вам как имя информационного компьютера, так и IP
чтобы получить IP-адрес удаленной машины, если вы знаете имя машины, используйте это
InetAddress address = InetAddress.getByName("name of the machine");
или
String sIPAddress = request.getRemoteAddr(); //or getRemoteHost()
получает удаленный IP-адрес клиента.
это работает.
Ответ №2:
По необходимости ваш веб-сервер будет видеть только IP-адрес компьютера, который отправил вам запрос. Если пользователь находится за прокси-сервером, это будет прокси-сервер, делающий запрос от имени пользователя (отсюда «прокси»). У вас нет возможности отследить источник запроса дальше, поскольку он может прийти откуда угодно. Только прокси-сервер будет знать, и пока он не сообщит вам, вы не узнаете.
Прокси может отправлять дополнительный HTTP-заголовок типа X-Forwarded-For
, и в этом случае он сообщает вам, от чьего имени он действует. Этот IP-адрес, в свою очередь, также может быть прокси, хотя вы не можете знать. Кроме того, эта информация не поддается проверке и может быть подделана, поэтому вам в любом случае не следует на нее полагаться. Единственный проверяемый IP-адрес, который вы получаете, — это тот, с которого ваш веб-сервер получил запрос и отправит ответ.
Если бы ваша машина находилась внутри локальной сети, у вас а) изначально не возникло бы этой проблемы и б) если бы она была, вы могли бы запросить что-либо, например, по имени машины. Это сильно зависело бы от сетевой инфраструктуры, хотя и не поддается обобщению.