Dalam JSP, metode untuk mendapatkan alamat IP klien adalah: request.getRemoteAddr (), yang valid dalam banyak kasus. Namun, setelah melewati Apache, Squid dan perangkat lunak proxy terbalik lainnya, Anda tidak bisa mendapatkan alamat IP klien yang sebenarnya. Jika perangkat lunak proxy terbalik digunakan, alamat IP yang diperoleh dengan menggunakan metode request.getRemoteAddr () 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 index.jsp/, bukan karena browser kami benar -benar mengakses file index.jsp di server. Sebaliknya, server proxy pertama -tama mengakses index.jsp, dan server proxy mengembalikan hasil yang diakses ke browser kami. Karena server proxy mengakses index.jsp, IP yang diperoleh dengan metode request.getRemoteAddr () di index.jsp sebenarnya adalah alamat server proxy, bukan alamat IP klien.
Oleh karena itu, metode untuk mendapatkan alamat IP nyata klien dapat diperoleh:
Public String getRemortip (permintaan httpservletRequest) {if (request.getHeader ("x-forwarded-for") == null) {return request.getRemoteAddr (); } return request.getHeader ("X-Forwarded-for"); }Metode 2 Untuk mendapatkan alamat IP nyata klien:
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 (); } return ip; }Namun, jika proxy terbalik multi-level dilewati, ada lebih dari satu nilai X-Forwarded-for, tetapi serangkaian nilai IP. Manakah IP asli dari sisi pengguna nyata?
Jawabannya adalah mengambil string IP valid pertama yang tidak dikutip di X-Forwarded-For. menyukai:
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