If reverse proxy software is used, when reverse proxying the URL of http://192.168.1.110:2046/ to the URL of http://www.xxx.com/, use the request.getRemoteAddr() method to obtain the IP Alamat diperoleh dengan menggunakan metode request.getRemoteAddr () Ini adalah: 127.0.0.1 atau 192.168.1.110, bukan IP asli klien.
Setelah melewati proxy, karena lapisan perantara ditambahkan antara klien dan layanan, server tidak dapat secara langsung mendapatkan IP klien, dan aplikasi sisi server tidak dapat langsung kembali ke klien melalui alamat penerusan. Namun, dalam informasi header HTTP tentang penerusan permintaan, informasi X-Forwarded untuk ditambahkan. Digunakan untuk melacak alamat IP klien asli dan alamat server yang diminta oleh klien asli. Ketika kami mengakses http://www.xxx.com/index.jsp/, sebenarnya bukan browser kami yang benar -benar mengakses file index.jsp di server, tetapi server proxy pertama kali mengakses http: //192.168. 2046/index.jsp, server proxy mengembalikan hasil yang diakses ke browser kami. Server proxy, bukan alamat IP klien.
Kemudian, metode untuk mendapatkan alamat IP nyata dari klien dapat diperoleh:
Salinan kode adalah sebagai berikut:
string publik getRemortip (permintaan httpservletrequest) {
if (request.getheader ("X-Forwarded-for") == null) {
return request.getRemoteAddr ();
}
return request.getheader ("X-Forwarded-for");
}
Tetapi ketika saya mengunjungi http://www.xxx.com/index.jsp/, alamat IP yang dikembalikan selalu tidak diketahui, bukan 127.0.0.1 atau 192.168.1.110 seperti yang ditunjukkan di atas, dan saya mengunjungi http: // kapan /192.168. 1.110: 2046/index.jsp, alamat IP nyata klien dapat dikembalikan dan metode ditulis untuk memverifikasi. Alasannya terletak pada cumi -cumi. Item Forwarded_for di file konfigurasi squid.conf.
Oleh karena itu, metode kedua untuk mendapatkan alamat IP nyata klien dapat diperoleh:
Salinan kode adalah sebagai berikut:
string publik getIpaddr (permintaan httpservletrequest) {
String ip = request.getHeader ("X-Forwarded-for");
if (ip == null || ip.length () == 0 || "tidak diketahui" .equalsignorecase (ip)) {
ip = request.getHeader ("proxy-client-ip");
}
if (ip == null || ip.length () == 0 || "tidak diketahui" .equalsignorecase (ip)) {
ip = request.getHeader ("WL-Proxy-Client-IP");
}
if (ip == null || ip.length () == 0 || "tidak diketahui" .equalsignorecase (ip)) {
ip = request.getRemoteAddr ();
}
mengembalikan IP;
}
Namun, jika proxy terbalik multi-level dilewati, ada lebih dari satu nilai X-Forwarded-for, tetapi serangkaian nilai IP.
Jawabannya adalah mengambil string IP valid pertama yang tidak dikutip di X-Forwarded-For.
menyukai:
Salinan kode adalah sebagai berikut:
X-Forwarded-For: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
IP Nyata Pengguna adalah: 192.168.1.110