Dalam JSP, kaedah untuk mendapatkan alamat IP pelanggan ialah: request.getRemoteAddr() Kaedah ini berkesan dalam kebanyakan kes. Walau bagaimanapun, alamat IP sebenar pelanggan tidak boleh diperolehi melalui perisian proksi terbalik seperti Apache dan Squid.
Jika perisian proksi terbalik digunakan, apabila memproksi terbalik URL http://192.168.1.110:2046/ ke URL http://www.javapeixun.com.cn/, gunakan permintaan Alamat IP yang diperolehi oleh kaedah getRemoteAddr() ialah: 127.0.0.1 atau 192.168.1.110, bukan IP sebenar pelanggan.
Selepas membuat proksi, disebabkan penambahan lapisan perantaraan antara klien dan perkhidmatan, pelayan tidak boleh terus mendapatkan IP klien, dan aplikasi sebelah pelayan tidak boleh terus mengembalikan alamat kepada klien dengan memajukan permintaan. Walau bagaimanapun, maklumat X-FORWARDED-FOR ditambahkan pada maklumat pengepala HTTP permintaan yang dimajukan. Digunakan untuk menjejak alamat IP klien asal dan alamat pelayan yang diminta oleh klien asal. Apabila kami melawati http://www.javapeixun.com.cn /index.jsp/, sebenarnya, bukan pelayar kami yang sebenarnya mengakses fail index.jsp pada pelayan, tetapi pelayan proksi mula-mula mengakses http:// 192.168.1.110: 2046/index.jsp, pelayan proksi mengembalikan hasil yang diakses kepada penyemak imbas kami, kerana pelayan proksi yang mengakses index.jsp, jadi index.jsp diperoleh melalui kaedah request.getRemoteAddr() IP ialah sebenarnya alamat pelayan proksi, bukan alamat IP pelanggan.
Jadi kita boleh mendapatkan kaedah pertama untuk mendapatkan alamat IP sebenar pelanggan:
public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }
Tetapi apabila saya melawat http://www.5a520.cn / index.jsp /, alamat IP yang dikembalikan sentiasa tidak diketahui, dan ia bukan 127.0.0.1 atau 192.168.1.110 seperti yang ditunjukkan di atas Apabila saya melawati http://192.168.1.110:2046/index.jsp, alamat IP pelanggan boleh. dikembalikan. Saya menulis kaedah untuk mengesahkan alamat IP sebenar. Sebabnya terletak pada Sotong. Item forwarded_for dalam fail konfigurasi squid.conf dihidupkan secara lalai Jika forwarded_for ditetapkan kepada off, maka: :
public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan alamat IP sebenar pelanggan di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!