GVKun编程网logo

java获取客户端的ip地址(java获取客户端的ip地址变成服务器地址)

15

对于想了解java获取客户端的ip地址的读者,本文将是一篇不可错过的文章,我们将详细介绍java获取客户端的ip地址变成服务器地址,并且为您提供关于c#–获取客户端的IP地址和计算机名称?、java–

对于想了解java获取客户端的ip地址的读者,本文将是一篇不可错过的文章,我们将详细介绍java获取客户端的ip地址变成服务器地址,并且为您提供关于c# – 获取客户端的IP地址和计算机名称?、java – 在GWT和Google App Engine中获取客户端的IP地址、java 获取客户端的 ip 地址、Java 获取客户端真实IP地址的有价值信息。

本文目录一览:

java获取客户端的ip地址(java获取客户端的ip地址变成服务器地址)

java获取客户端的ip地址(java获取客户端的ip地址变成服务器地址)

有时候我们需要根据系统的业务,做一些事情,比如,我这里有一个商城,今天有一件商品促销,限每个ip只能购买一件,那么我们就需要记录用户下单的ip,好的下面我直接贴出来代码。

/**
	 * 获得客户端ip地址
	 * 
	 * @param request
	 * @return 获得客户端ip地址
	 */
	public final static String getClientIp(HttpServletRequest request){
		String unknown = "unknown";
		String wrap = "\n\t\t";
		StringBuilder logBuilder = new StringBuilder();
		// 是否使用反向代理
		String ipAddress = request.getHeader(header_xForwardedFor);
		logBuilder.append(wrap + "header_xForwardedFor:" + ipAddress);
		if (Validator.isNullOrEmpty(ipAddress) || unknown.equalsIgnoreCase(ipAddress)){
			ipAddress = request.getHeader(header_proxyClientIP);
			logBuilder.append(wrap + "header_proxyClientIP:" + ipAddress);
		}
		if (Validator.isNullOrEmpty(ipAddress) || unknown.equalsIgnoreCase(ipAddress)){
			ipAddress = request.getHeader(header_wLProxyClientIP);
			logBuilder.append(wrap + "header_wLProxyClientIP:" + ipAddress);
		}
		if (Validator.isNullOrEmpty(ipAddress) || unknown.equalsIgnoreCase(ipAddress)){
			ipAddress = request.getRemoteAddr();
			logBuilder.append(wrap + "request.getRemoteAddr():" + ipAddress);
		}
		// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照'',''分割
		if (ipAddress != null && ipAddress.length() > 15){ // "***.***.***.***".length() = 15
			logBuilder.append(wrap + "all:" + ipAddress);
			if (ipAddress.indexOf(",") > 0){
				ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
			}
		}
		log.debug(logBuilder.toString());
		return ipAddress;
	}

OK,这个方法会返回一个用户的ip地址的字符串。

c# – 获取客户端的IP地址和计算机名称?

c# – 获取客户端的IP地址和计算机名称?

我有一个ASP.Net 4.0应用程序,发布在IIS 7.0服务器上的公司Intranet网络上,我想在我的数据库中保存客户端的IP地址.所以我想得到客户的IP地址和计算机名称.

我尝试了从互联网搜索的方法,但我得到“服务器IP”一个“服务器名称”.我认为这是合乎逻辑的,因为我尝试的所有方法都是服务器端的C#代码.

所以,我认为我必须使用像JavaScript这样的客户端代码.

有没有人有正确的方法来做到这一点?

解决方法

您可以在Request对象上使用 UserHostAddressUserHostName属性:

string ip = Request.UserHostAddress;
string hostname = Request.UserHostName;

java – 在GWT和Google App Engine中获取客户端的IP地址

java – 在GWT和Google App Engine中获取客户端的IP地址

我需要在GWT / GAE( Java)应用程序中捕获客户端的IP地址.由于GAE不支持全套java.net API,因此我无法执行下面的代码段代码.任何人都可以提出可靠的方法来达到同样的目
for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
    final NetworkInterface intf = en.nextElement();
    for (final Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
        final InetAddress ip = enumIpAddr.nextElement();
        if (!ip.isLoopbackAddress() && !ip.isLinkLocalAddress() && !ip.isAnyLocalAddress()) {
                return ip.getHostAddress().toString();
        }
    }
}

对于Python版本,我们可以:

os.environ['REMOTE_ADDR']

要么

String ip = self.request.remote_addr;

但是什么是Java等价物?

解决方法

好的,我知道了.在应该扩展RemoteServiceServlet的Servlet中执行以下操作:
final String ip = getThreadLocalRequest().getRemoteAddr();

java 获取客户端的 ip 地址

java 获取客户端的 ip 地址

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
 
/**
 * 获取访问接口的客户端的ip地址
 * @author remainsu
 * @version 1.0 2019-05-11
 * 
 * 使用说明:
 *   1. Controller中加入HttpServletRequest参数(HttpServletRequest request)
 *   2. 获取ip地址:String ipAddress = IpUtil.getIpAddr(request);
 */
public class IpUtil {
    public static String getIpAddr(HttpServletRequest request) {
        String ipAddress = null;
        try {
            ipAddress = request.getHeader("x-forwarded-for");
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getHeader("WL-Proxy-Client-IP");
            }
            if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
                ipAddress = request.getRemoteAddr();
                if (ipAddress.equals("127.0.0.1")) {
                    // 根据网卡取本机配置的IP
                    InetAddress inet = null;
                    try {
                        inet = InetAddress.getLocalHost();
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    }
                    ipAddress = inet.getHostAddress();
                }
            }
            // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照'',''分割
            if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
                // = 15
                if (ipAddress.indexOf(",") > 0) {
                    ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
                }
            }
        } catch (Exception e) {
            ipAddress="";
        }
        // ipAddress = this.getRequest().getRemoteAddr();
 
        return "0:0:0:0:0:0:0:1".equals(ipAddress) ? "127.0.0.1" : ipAddress;
    }
}

Java 获取客户端真实IP地址

Java 获取客户端真实IP地址

       本文基于方法 HttpServletRequest.getHeader 和 HttpServletRequest.getRemoteAddr 介绍如何在服务器端获取客户端真实IP地址。

业务背景

      服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等拦截,在进行IP限定的时候就需要获取客户端真实的IP。

基础知识

 
      访问服务端的方式一般分为两种:
  • 未经过代理,直接访问服务器端;
  • 通过多级代理,最终到达服务器端(nginx,squid,haproxy)。
      客户端请求信息都包含在HttpServletRequest中,对于第一种访问方式可以通过getRemoteAddr()方法获得客户端真实IP,而另一种则行不通,但是可以通过x-forwarded-for获得转发后请求信息。当客户端请求被转发时,IP将会追加在其后并以英文逗号隔开,例如:10.47.103.13,4.2.2.2,10.96.112.230。
请求中的参数:
  request.getHeader("x-forwarded-for") : 10.47.103.13,4.2.2.2,10.96.112.230
  request.getHeader("X-Real-IP") : 10.47.103.13
  request.getRemoteAddr():10.96.112.230

       客户端访问经过转发,IP将会追加在其后并以逗号隔开。最终准确的客户端信息为:

  • x-forwarded-for 不为空,则为逗号前第一个IP ;
  • X-Real-IP不为空,则为该IP ;
  • 否则为getRemoteAddr() ;
       相关请求头的解释:
       X-Forwarded-For 记录一个请求从客户端出发到目标服务器过程中经历的代理,或者负载平衡设备的IP。这是由缓存代理软件 Squid 引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。格式为X-Forwarded-For:client1,proxy1,proxy2,一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器的ip。现在大部分的代理都会加上这个请求头。
       Proxy-Client-IP/WL- Proxy-Client-IP 这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL-Proxy-Client-IP是他的weblogic插件加上的头。
       HTTP_CLIENT_IP  有些代理服务器会加上此请求头。
      X-Real-IP nginx代理一般会加上此请求头。

获取客户端真实IP地址

      源码:

 

/**
 * 获取客户端的IP地址<br/>
 * 注意本地测试访问项目地址时,浏览器请求不要用 localhost,请用本机IP;否则,取不到 IP
 *
 * @author east7
 * @date 2019年12月03日
 * @return String 真实IP地址
 */
public static String getClientIpAddress(HttpServletRequest request) {
    // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
    String headerName = "x-forwarded-for";
    String ip = request.getHeader(headerName);
    if (null != ip && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
        // 多次反向代理后会有多个IP值,第一个IP才是真实IP,它们按照英文逗号'',''分割
        if (ip.indexOf(",") != -1) {
            ip = ip.split(",")[0];
        }
    }
    if (checkIp(ip)) {
        headerName = "Proxy-Client-IP";
        ip = request.getHeader(headerName);
    }
    if (checkIp(ip)) {
        headerName = "WL-Proxy-Client-IP";
        ip = request.getHeader(headerName);
    }
    if (checkIp(ip)) {
        headerName = "HTTP_CLIENT_IP";
        ip = request.getHeader(headerName);
    }
    if (checkIp(ip)) {
        headerName = "HTTP_X_FORWARDED_FOR";
        ip = request.getHeader(headerName);
    }
    if (checkIp(ip)) {
        headerName = "X-Real-IP";
        ip = request.getHeader(headerName);
    }
    if (checkIp(ip)) {
        headerName = "remote addr";
        ip = request.getRemoteAddr();
        // 127.0.0.1 ipv4, 0:0:0:0:0:0:0:1 ipv6
        if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
            //根据网卡取本机配置的IP
            InetAddress inet = null;
            try {
                inet = InetAddress.getLocalHost();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            ip = inet.getHostAddress();
        }
    }
    logger.info("getClientIp  IP is " + ip + ", headerName = " + headerName);
    return ip;
}
private static boolean checkIp(String ip) {
    if (null == ip || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        return true;
    }
    return false;
}

 

我们今天的关于java获取客户端的ip地址java获取客户端的ip地址变成服务器地址的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 获取客户端的IP地址和计算机名称?、java – 在GWT和Google App Engine中获取客户端的IP地址、java 获取客户端的 ip 地址、Java 获取客户端真实IP地址的相关信息,可以在本站进行搜索。

本文标签: