ใน JSP วิธีการรับที่อยู่ IP ของลูกค้าคือ: request.getRemoteaddr () ซึ่งใช้ได้ในกรณีส่วนใหญ่ อย่างไรก็ตามหลังจากผ่าน Apache, Squid และซอฟต์แวร์พร็อกซีย้อนกลับอื่น ๆ คุณจะไม่สามารถรับที่อยู่ IP จริงของไคลเอนต์ได้ หากใช้ซอฟต์แวร์พร็อกซีย้อนกลับที่อยู่ IP ที่ได้รับโดยใช้ request.getRemoteaddr () คือ: 127.0.0.1 หรือ 192.168.1.110 ไม่ใช่ IP จริงของไคลเอนต์
หลังจากผ่านพร็อกซีเนื่องจากมีการเพิ่มเลเยอร์กลางระหว่างไคลเอนต์และบริการเซิร์ฟเวอร์ไม่สามารถรับ IP ของไคลเอนต์ได้โดยตรงและแอปพลิเคชันฝั่งเซิร์ฟเวอร์ไม่สามารถกลับไปที่ไคลเอนต์ได้โดยตรงผ่านที่อยู่การส่งต่อ อย่างไรก็ตามในข้อมูลส่วนหัว HTTP ของการส่งต่อคำขอจะเพิ่มข้อมูล X-Forwarded-for ใช้เพื่อติดตามที่อยู่ IP ของไคลเอนต์ดั้งเดิมและที่อยู่เซิร์ฟเวอร์ที่ร้องขอโดยไคลเอนต์ดั้งเดิม เมื่อเราเข้าถึง index.jsp/ไม่ใช่ว่าเบราว์เซอร์ของเราเข้าถึงไฟล์ index.jsp บนเซิร์ฟเวอร์จริง ๆ พร็อกซีเซิร์ฟเวอร์จะเข้าถึง index.jsp ก่อนและพร็อกซีเซิร์ฟเวอร์ส่งคืนผลลัพธ์การเข้าถึงไปยังเบราว์เซอร์ของเรา เนื่องจากพร็อกซีเซิร์ฟเวอร์เข้าถึง index.jsp, IP ที่ได้จากวิธีการร้องขอ. getRemoteaddr () ใน index.jsp เป็นที่อยู่ของพร็อกซีเซิร์ฟเวอร์ไม่ใช่ที่อยู่ IP ของไคลเอนต์
ดังนั้นวิธีการรับที่อยู่ IP จริงของไคลเอนต์สามารถรับได้:
สตริงสาธารณะ getRemortip (คำขอ httpservletRequest) {ถ้า (request.getheader ("x-forwarded-for") == null) {return request.getRemoteaddr (); } return request.getheader ("x-forwarded-for"); -วิธีที่ 2 เพื่อรับที่อยู่ IP จริงของไคลเอนต์:
สตริงสาธารณะ getipaddr (คำขอ httpservletrequest) {string ip = request.getheader ("x-forwarded-for"); if (ip == null || ip.length () == 0 || "ไม่ทราบ" .equalsignorecase (ip)) {ip = request.getheader ("proxy-client-ip"); } if (ip == null || ip.length () == 0 || "ไม่ทราบ" .equalsignorecase (ip)) {ip = request.getheader ("wl-proxy-client-ip"); } if (ip == null || ip.length () == 0 || "ไม่ทราบ" .equalsignorecase (ip)) {ip = request.getRemoteaddr (); } return ip; -อย่างไรก็ตามหากมีการส่งพร็อกซีย้อนกลับหลายระดับจะมีมากกว่าหนึ่งค่าของ X-forwarded-for แต่เป็นชุดของค่า IP IP ใดที่แท้จริงของฝ่ายผู้ใช้จริง?
คำตอบคือการใช้สตริง IP ที่ไม่ถูกต้องที่ไม่ได้ใช้ครั้งแรกใน X-Forwarded-for ชอบ:
X-Forwarded-for: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
IP จริงของผู้ใช้คือ: 192.168.1.110