Ответ 1
Ответ сложный.
-
Если ваш сервлет работает на веб-сервере, который находится за обратным прокси-сервером или балансировщиком нагрузки, тогда этот веб-прокси можно настроить для ввода заголовка запроса, который дает IP-адрес, с которого пришел запрос. Различные обратные прокси будут вводить разные заголовки. Обратитесь к документации для вашего (front-end) сервера.
-
Если ваш клиент использует прокси-сервер (forward), он может вставлять заголовки, чтобы сказать, что такое IP-адрес клиента... или это может быть не так. И IP-адрес, который он вставляет, может быть неправильным.
-
Значение, которое вы получаете при вызове
request.getRemoteAddr()
, будет IP-адресом непосредственного источника запроса.
Ни один из перечисленных вами заголовков не является стандартным, но считается, что "x-forwarded-for" является стандартом defacto; то есть именно тот, который, скорее всего, будет вставлен прокси и т.д., если что-то вводится.
Наконец, даже если вы получили IP-адрес, это не обязательно поможет вам. Например, если клиент находится в частной сети и подключается к Интернету через NAT-шлюз, тогда IP-адрес в HTTP-запросе будет адресом NAT-сервера... не фактическим IP-адресом клиента.
Итак, что это значит? В общем, это означает, что в целом вы не можете надежно узнать IP-адрес системы, из которого возник запрос.