मैं एक साधारण सी समस्या के साथ कुछ समस्या हो रही है असली ग्राहक आईपी प्राप्त करें। मैं एक HTTPServlet अंदर असली ग्राहक आईपी मिलेगा।एक सर्वलेट
अब जब से मैं प्रयोग किया है:
request.getRemoteAddr()
लेकिन अब यह एक झूठी आईपी देता है। उदाहरण: xxx.xxx.xxx। लेकिन मेरे आईपी xxx.xxx.xxx की तरह कुछ है। । (http://whatismyipaddress.com/ पर चेक किया गया)।
request.getHeader("X-Forwarded-For")
यह NULL भेजता है:
अब मैं का उपयोग करने की कोशिश की।
मैं भी निम्नलिखित वर्ग के साथ एक जांच में ले लिया:
public class IpUtils {
public static final String _255 = "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
public static final Pattern pattern = Pattern.compile("^(?:" + _255 + "\\.){3}" + _255 + "$");
public static String longToIpV4(long longIp) {
int octet3 = (int) ((longIp >> 24) % 256);
int octet2 = (int) ((longIp >> 16) % 256);
int octet1 = (int) ((longIp >> 8) % 256);
int octet0 = (int) ((longIp) % 256);
return octet3 + "." + octet2 + "." + octet1 + "." + octet0;
}
public static long ipV4ToLong(String ip) {
String[] octets = ip.split("\\.");
return (Long.parseLong(octets[0]) << 24) + (Integer.parseInt(octets[1]) << 16)
+ (Integer.parseInt(octets[2]) << 8) + Integer.parseInt(octets[3]);
}
public static boolean isIPv4Private(String ip) {
long longIp = ipV4ToLong(ip);
return (longIp >= ipV4ToLong("10.0.0.0") && longIp <= ipV4ToLong("10.255.255.255"))
|| (longIp >= ipV4ToLong("172.16.0.0") && longIp <= ipV4ToLong("172.31.255.255"))
|| longIp >= ipV4ToLong("192.168.0.0") && longIp <= ipV4ToLong("192.168.255.255");
}
public static boolean isIPv4Valid(String ip) {
return pattern.matcher(ip).matches();
}
public static String getIpFromRequest(HttpServletRequest request) {
String ip;
boolean found = false;
if ((ip = request.getHeader("x-forwarded-for")) != null) {
StringTokenizer tokenizer = new StringTokenizer(ip, ",");
while (tokenizer.hasMoreTokens()) {
ip = tokenizer.nextToken().trim();
if (isIPv4Valid(ip) && !isIPv4Private(ip)) {
found = true;
break;
}
}
}
if (!found) {
ip = request.getRemoteAddr();
}
return ip;
}
}
यह भी xxx.xxx.xxx.50 आईपी लौट आए। :(
अब मैं अपने सर्वलेट कंटेनर से पहले कैसे वास्तविक ग्राहक आईपी प्राप्त करने के लिए पता नहीं। किसी को जानता है समाधान कृपया एक जवाब हो।
सीधे इंटरनेट से जुड़ा हुआ अपने सर्वर है? क्या कोई राउटर, लोड बैलेंसर्स, एनएटी डिवाइस इत्यादि हैं? – mindas
बस एक ruter है। – TAR515