Get Client IP Intranet IP and extranet IP according to request

Source: Internet
Author: User

In the JSP, the method to obtain the IP address of the client is: Request.getremoteaddr (), which is valid in most cases. However, the real IP address of the client cannot be obtained through the reverse proxy software such as Apache,squid.
If the reverse proxy software is used, the URL of the http://192.168.1.110:2046/is reversed to the URL of the http://www.xxx.com/, with REQUEST.GETREMOTEADDR () The IP address obtained by the method is: 127.0.0.1 or 192.168.1.110, not the real IP of the client.
After the agent, due to the addition of the middle tier between the client and the service, so the server can not directly get the client's IP, the server-side application can not directly forward the requested address to the client. However, the x-forwarded-for information is added to the HTTP header information of the forwarding request. Used to track the original client IP address and the server address of the original client request. When we visit http://www.xxx.com/index.jsp/, it is not that our browser actually accesses the index.jsp file on the server, but instead it is accessed by the proxy server first http://192.168.1.110:2046/ INDEX.JSP, the proxy server will return the results of the access to our browser, because it is the proxy server to access index.jsp, so index.jsp through the request.getremoteaddr () is actually the address of the proxy server, not the IP address of the client.
So we can get the real IP address of the client method one:

Import java.net.InetAddress;
Import Java.net.NetworkInterface;
Import java.net.SocketException;
Import java.util.ArrayList;
Import java.util.Enumeration;
Import java.util.List;

Import Javax.servlet.http.HttpServletRequest;

/**
* The Class iputils.
*
*/
Public abstract class Iputils {

/**
* Gets the client IP addr.
*
* @param request the request
* @return the client IP addr
*/
public static String getclientipaddr (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;
}

/**
* Gets the real IPs.
*
* @return The real IPs
*/
public static list<string> Getrealips () {
list<string> ips = new arraylist<string> ();
String localip = null;//local IP, which is returned if no extranet IP is configured
String Netip = null;//out-of-network IP
Enumeration<networkinterface> netinterfaces;
try {
Netinterfaces = Networkinterface.getnetworkinterfaces ();
} catch (SocketException e) {
return null;
}
inetaddress IP = null;
Boolean finded = false;//If an extranet IP is found
while (Netinterfaces.hasmoreelements () &&!finded) {
NetworkInterface ni = netinterfaces.nextelement ();
enumeration<inetaddress> address = ni.getinetaddresses ();
while (Address.hasmoreelements ()) {
ip = address.nextelement ();
if (!ip.issitelocaladdress () &&!ip.isloopbackaddress () && ip.gethostaddress (). IndexOf (":") = =-1) {// External network IP
Netip = Ip.gethostaddress ();
Ips.add (Netip);
Finded = true;
Break
} else if (ip.issitelocaladdress () &&!ip.isloopbackaddress () && ip.gethostaddress (). IndexOf (":") = =-1 ) {//Intranet IP
Localip = Ip.gethostaddress ();
Ips.add (Localip);
}
}
}
return IPs;
}

/**
* Gets the real IP.
*
* @return The real IP
*/
public static String Getrealip () {
Return Getrealips (). iterator (). Next ();
}
}

Get Client IP Intranet IP and extranet IP according to request

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.