Se o software proxy reverso for usado, ao reverter proxy o URL de http://192.168.1.110:2046/ para o URL de http://www.xxx.com/, use o método request.getRemoteaddr () para obter o IP Endereço obtido usando o método request.getRemoteaddr () é: 127.0.0.1 ou 192.168.1.110, não o IP real do cliente.
Depois de passar o proxy, uma vez que uma camada intermediária é adicionada entre o cliente e o serviço, o servidor não pode obter diretamente o IP do cliente e o aplicativo do lado do servidor não pode retornar diretamente ao cliente através do endereço de encaminhamento. No entanto, nas informações do cabeçalho HTTP do encaminhamento da solicitação, as informações X-forward-for são adicionadas. Usado para rastrear o endereço IP do cliente original e o endereço do servidor solicitado pelo cliente original. Quando acessamos http://www.xxx.com/index.jsp/, na verdade não é o nosso navegador que realmente acessa o arquivo index.jsp no servidor, mas o servidor proxy acessa primeiro http: //192.168. 2046/index.jsp, o servidor proxy retorna o resultado acessado ao nosso navegador. O servidor proxy, não o endereço IP do cliente.
Em seguida, um método para obter o endereço IP real do cliente pode ser obtido:
A cópia do código é a seguinte:
public string getRemortip (httpServletRequest Request) {
if (request.getheader ("x-forwarded for") == null) {
Return request.getRemoTeaddr ();
}
Return request.getheader ("X-forwarded for");
}
Mas quando eu visito http://www.xxx.com/index.jsp/, o endereço IP retornado é sempre desconhecido, não 127.0.0.1 ou 192.168.1.110, como mostrado acima, e visito http: // quando /192.168. 1.110: 2046/index.jsp, o endereço IP real do cliente pode ser retornado e um método é gravado para verificar. A razão está em lula. O item Forwarded_For no arquivo de configuração squid.conf forwarded_for é padrão para ON.
Portanto, o segundo método para obter o endereço IP real do cliente pode ser obtido:
A cópia do código é a seguinte:
public String getipaddr (httpServletRequest Solicy) {
String ip = request.getheader ("x-forwarded for");
if (ip == null || ip.length () == 0 || "desconhecido" .equalSignorecase (ip)) {
ip = request.getheader ("proxy-client-ip");
}
if (ip == null || ip.length () == 0 || "desconhecido" .equalSignorecase (ip)) {
ip = request.getheader ("wl-proxy-client-ip");
}
if (ip == null || ip.length () == 0 || "desconhecido" .equalSignorecase (ip)) {
ip = request.getRemoTeaddr ();
}
retornar ip;
}
No entanto, se um proxy reverso de vários níveis for passado, há mais de um valor de X-forward-for, mas uma sequência de valores de IP.
A resposta é pegar a primeira string IP válida não abrangente em X-forwarded.
como:
A cópia do código é a seguinte:
X-forwarded for: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
O IP real do usuário é: 192.168.1.110