Heim  >  Artikel  >  Java  >  So erhalten Sie die echte IP-Adresse des Clients in Java

So erhalten Sie die echte IP-Adresse des Clients in Java

WBOY
WBOYnach vorne
2023-05-10 11:46:051304Durchsuche

In JSP lautet die Methode zum Abrufen der IP-Adresse des Clients: request.getRemoteAddr(). Diese Methode ist in den meisten Fällen effektiv. Die tatsächliche IP-Adresse des Clients kann jedoch nicht über Reverse-Proxy-Software wie Apache und Squid ermittelt werden.

Wenn Reverse-Proxy-Software verwendet wird, verwenden Sie beim Reverse-Proxying der URL http://192.168.1.110:2046/ zur URL http://www.javapeixun.com.cn/ die Methode request.getRemoteAddr() Die erhaltene IP-Adresse lautet: 127.0.0.1 oder 192.168.1.110, nicht die tatsächliche IP des Clients.

Nach dem Durchlaufen des Proxys kann der Server aufgrund der Hinzufügung einer Zwischenschicht zwischen dem Client und dem Dienst die IP des Clients nicht direkt abrufen und die serverseitige Anwendung kann die Adresse nicht direkt durch Weiterleiten der Anforderung an den Client zurückgeben . Den HTTP-Header-Informationen der weitergeleiteten Anfrage werden jedoch X-FORWARDED-FOR-Informationen hinzugefügt. Wird verwendet, um die ursprüngliche Client-IP-Adresse und die vom ursprünglichen Client angeforderte Serveradresse zu verfolgen. Wenn wir http://www.javapeixun.com.cn /index.jsp/ besuchen, ist es tatsächlich nicht unser Browser, der tatsächlich auf die Datei index.jsp auf dem Server zugreift, sondern der Proxyserver greift zuerst auf http:// zu 192.168.1.110: 2046/index.jsp, der Proxyserver gibt die Zugriffsergebnisse an unseren Browser zurück, da es der Proxyserver ist, der auf index.jsp zugreift, sodass index.jsp über die Methode request.getRemoteAddr() abgerufen wird. Die IP ist eigentlich die Adresse des Proxyservers, nicht die IP-Adresse des Clients.

So können wir die erste Methode erhalten, um die tatsächliche IP-Adresse des Clients zu ermitteln:

public String getRemortIP(HttpServletRequest request) {   if (request.getHeader("x-forwarded-for") == null) {    return request.getRemoteAddr();   }   return request.getHeader("x-forwarded-for");  }

Aber wenn ich http://www.5a520.cn /index.jsp/ besuche, ist die zurückgegebene IP-Adresse immer unbekannt , was auch nicht 127.0.0.1 oder 192.168.1.110 ist, wie oben gezeigt. Wenn ich http://192.168.1.110:2046/index.jsp besuche, kann die tatsächliche IP-Adresse des Clients zurückgegeben werden, und ich habe eine geschrieben Methode, um es zu überprüfen. Der Grund liegt in Squid. Das Element „forwarded_for“ in der Konfigurationsdatei von „squid.conf“ ist standardmäßig aktiviert. Wenn „forwarded_for“ auf „off“ gesetzt ist, gilt: Wenn der mehrstufige Reverse-Proxy übergeben wird, ist der Wert von „X-Forwarded-For“ nicht nur eins, sondern eine Reihe von IP-Werten. Welcher ist die echte IP des echten Clients?

Die Antwort besteht darin, die erste nicht unbekannte gültige IP-Zeichenfolge in X-Forwarded-For zu verwenden. Zum Beispiel:

Das obige ist der detaillierte Inhalt vonSo erhalten Sie die echte IP-Adresse des Clients in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen