IP-Adresse des Clients erhalten

Ich entwickle eine Web-Anwendung mit JSP , Servlets (Container: Glassfish ), in denen ich die IP Address Clients bekommen muss.

Ich erhalte die IP-Adresse des Clients, da ich nur auf Computern mit Office Zugriff auf einige Seiten (wie Kundenwartungsformulare) gewähren möchte. Ich möchte den Zugriff auf diese Seiten außerhalb des Büros beschränken.

Folgendes ist mein Code bisher:

weg1

 String ipAddress = request.getRemoteAddr(); System.out.println("IP Address: "+ipAddress); 

weg2

 String ipAddress=null; String getWay = request.getHeader("VIA"); // Gateway ipAddress = request.getHeader("X-FORWARDED-FOR"); // proxy if(ipAddress==null) { ipAddress = request.getRemoteAddr(); } System.out.println("IP Address: "+ipAddress); 

Der obige Code gibt mir jedes Mal eine different IP Address wenn ich meinen Computer neu starte (Shutdown-> Start oder Restart).

Ich IP6 wie:

 fe80:0:0:0:20ca:1776:f5ff:ff15%13 

Lass mich wissen, was mit diesem Code nicht stimmt?

Wie @martin und diese Antwort erklärt, ist es kompliziert. Es gibt keine kugelsichere Möglichkeit, die IP-Adresse des Clients zu erhalten.

Das Beste, was Sie tun können, ist zu versuchen, "X-Forwarded-For" zu parsen und sich auf request.getRemoteAddr();

 public static String getClientIpAddress(HttpServletRequest request) { String xForwardedForHeader = request.getHeader("X-Forwarded-For"); if (xForwardedForHeader == null) { return request.getRemoteAddr(); } else { // As of https://en.wikipedia.org/wiki/X-Forwarded-For // The general format of the field is: X-Forwarded-For: client, proxy1, proxy2 ... // we only want the client return new StringTokenizer(xForwardedForHeader, ",").nextToken().trim(); } } 

Ich verwende die folgende statische Hilfsmethode, um die IP eines Clients abzurufen:

 public static String getClientIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_X_FORWARDED"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_FORWARDED"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("HTTP_VIA"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getHeader("REMOTE_ADDR"); } if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) { ip = request.getRemoteAddr(); } return ip; } 

Ich mag das, du kannst es versuchen

 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; } 

Wie bereits erwähnt, sollte X-Forwarded-For auf Komma überprüft werden. (Siehe: http://en.wikipedia.org/wiki/X-Forwarded-For ). Das allgemeine Format des Feldes lautet: X-Forwarded-For: clientIP, proxy1, proxy2 … und so weiter. Wir werden also so etwas sehen: X-FORWARDED-FOR: 129.77.168.62, 129.77.63.62.

Ich glaube, es hat mehr damit zu tun, wie Ihr Netzwerk konfiguriert ist. Servlet gibt Ihnen einfach die Adresse, die es findet.

Ich kann zwei Problemumgehungen vorschlagen. Versuchen Sie zuerst, IPV4 zu verwenden. Sehen Sie diese SO Antwort

Versuchen Sie auch, die Methode request.getRemoteHost () zu verwenden, um die Namen der Computer abzurufen. Sicherlich sind die Namen unabhängig von der IP, der sie zugeordnet sind.

Ich denke immer noch, dass du das mit deiner Infrastruktur besprechen solltest.

Hier die Antwort, um Client-IP für OS Linux oder Windows zu bekommen, ist das Problem bei IExplorer einfach nicht möglich.

Aber hoffe das kann helfen:

 //NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23 var RTCPeerConnection = /*window.RTCPeerConnection ||*/window.webkitRTCPeerConnection || window.mozRTCPeerConnection; if (RTCPeerConnection) (function() { var rtc = new RTCPeerConnection({ iceServers : [] }); if (window.mozRTCPeerConnection) { // FF needs a channel/stream to proceed rtc.createDataChannel('', { reliable : false }); } ; rtc.onicecandidate = function(evt) { if (evt.candidate) grepSDP(evt.candidate.candidate); }; rtc.createOffer(function(offerDesc) { grepSDP(offerDesc.sdp); rtc.setLocalDescription(offerDesc); }, function(e) { console.warn("offer failed", e); }); var addrs = Object.create(null); addrs["0.0.0.0"] = false; function updateDisplay(newAddr) { if (newAddr in addrs) return; else addrs[newAddr] = true; var displayAddrs = Object.keys(addrs).filter(function(k) { return addrs[k]; }); document.getElementById('list').textContent = displayAddrs .join(" or perhaps ") || "n/a"; } function grepSDP(sdp) { var hosts = []; sdp.split('\r\n').forEach(function(line) { // cf http://tools.ietf.org/html/rfc4566#page-39 if (~line.indexOf("a=candidate")) { // http://tools.ietf.org/html/rfc4566#section-5.13 var parts = line.split(' '), // http://tools.ietf.org/html/rfc5245#section-15.1 addr = parts[4], type = parts[7]; if (type === 'host') updateDisplay(addr); } else if (~line.indexOf("c=")) { // http://tools.ietf.org/html/rfc4566#section-5.7 var parts = line.split(' '), addr = parts[2]; updateDisplay(addr); } }); } })(); else { document.getElementById('list').innerHTML = "ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1"; document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull."; } 

HTML

  Your IP: