对于想了解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地址变成服务器地址)
- c# – 获取客户端的IP地址和计算机名称?
- java – 在GWT和Google App Engine中获取客户端的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地址和计算机名称?
我尝试了从互联网搜索的方法,但我得到“服务器IP”一个“服务器名称”.我认为这是合乎逻辑的,因为我尝试的所有方法都是服务器端的C#代码.
所以,我认为我必须使用像JavaScript这样的客户端代码.
有没有人有正确的方法来做到这一点?
解决方法
UserHostAddress
和
UserHostName
属性:
string ip = Request.UserHostAddress; string hostname = Request.UserHostName;
java – 在GWT和Google App Engine中获取客户端的IP地址
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等价物?
解决方法
final String ip = getThreadLocalRequest().getRemoteAddr();
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地址
本文基于方法 HttpServletRequest.getHeader 和 HttpServletRequest.getRemoteAddr 介绍如何在服务器端获取客户端真实IP地址。
业务背景
服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等拦截,在进行IP限定的时候就需要获取客户端真实的IP。
基础知识
-
未经过代理,直接访问服务器端;
-
通过多级代理,最终到达服务器端(nginx,squid,haproxy)。
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() ;
获取客户端真实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地址的相关信息,可以在本站进行搜索。
本文标签: