Если используется программное обеспечение для обратного прокси, при обратном прокси -контакте URL -адрес http://192.168.1.110:2046/ URL -адреса http://www.xxx.com/, используйте метод request.getRemoteaddr (), чтобы получить ip Адрес, полученный с использованием метода request.getRemoteaddr (), он: 127.0.0.1 или 192.168.1.110, а не реальный IP клиента.
После передачи прокси, поскольку между клиентом и службой добавляется промежуточный уровень, сервер не может напрямую получить IP-адрес клиента, а приложение на стороне сервера не может напрямую вернуться к клиенту по адресу пересылки. Однако в информации HTTP-заголовка для пересылки запроса добавляется информация о X-Forwarded-для. Используется для отслеживания исходного IP -адреса клиента и адресу сервера, запрошенного исходным клиентом. Когда мы получаем доступ к http://www.xxx.com/index.jsp/, на самом деле не является нашим браузером, который фактически обращается к файлу index.jsp на сервере, но прокси -сервер сначала доступен http: //192.168. 2046/index.jsp, прокси -сервер возвращает доступ к нашему браузере. Прокси -сервер, а не IP -адрес клиента.
Затем можно получить метод получения реального IP -адреса клиента:
Кода -копия выглядит следующим образом:
public String getRemortip (httpservletrequest) {
if (request.getheader ("x-forwarded-for") == null) {
return request.getRemoteaddr ();
}
return request.getheader ("x-forwarded-for");
}
Но когда я посещаю http://www.xxx.com/index.jsp/, возвращаемый IP -адрес всегда неизвестен, а не 127.0.0.1 или 192.168.1.110, как показано выше, и я посещаю http: // Когда /192.168. 1.110: 2046/index.jsp, реальный IP -адрес клиента может быть возвращен, и метод записан для проверки. Причина заключается в кальмаре. Элемент fortury_for в файле конфигурации Quid.conf
Следовательно, второй метод получения реального IP -адреса клиента может быть получен:
Кода -копия выглядит следующим образом:
public String getipaddr (httpservletrequest) {
String ip = request.getheader ("x-forwarded-for");
if (ip == null || ip.length () == 0 || "Неизвестно" .EqualSignoreCase (ip)) {
ip = request.getheader ("Proxy-Client-IP");
}
if (ip == null || ip.length () == 0 || "Неизвестно" .EqualSignoreCase (ip)) {
ip = request.getheader ("wl-proxy-client-ip");
}
if (ip == null || ip.length () == 0 || "Неизвестно" .EqualSignoreCase (ip)) {
ip = request.getRemoteaddr ();
}
вернуть IP;
}
Однако, если прокси-прокси-сервер многоуровневого обратного, существует более одного значения X-Forwarded-For, но ряд значений IP.
Ответ состоит в том, чтобы взять первую непреодолимую допустимую IP-строку в X-Forwarded-For.
нравиться:
Кода -копия выглядит следующим образом:
X-Forwarded-For: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
Настоящий IP пользователя: 192.168.1.110