import org.apache.commons.lang.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
public
class
IPUtil {
public
static
String getIP(){
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if
(servletRequestAttributes == null) {
return
"127.0.0.1"
;
}
HttpServletRequest request = servletRequestAttributes.getRequest();
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.getHeader(
"HTTP_CLIENT_IP"
);
}
if
(ip == null || ip.length() == 0 ||
"unknown"
.equalsIgnoreCase(ip)) {
ip = request.getHeader(
"HTTP_X_FORWARDED_FOR"
);
}
if
(ip == null || ip.length() == 0 ||
"unknown"
.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if
(
"0:0:0:0:0:0:0:1"
.equals(ip)) {
ip =
"127.0.0.1"
;
}
return
ip;
}
public
static
boolean ipIsValid(String ipStart,String ipEnd, String ip) {
if
(StringUtils.isEmpty(ipStart)) {
throw
new
NullPointerException(
"起始IP不能为空!"
);
}
if
(StringUtils.isEmpty(ipEnd)) {
throw
new
NullPointerException(
"结束IP不能为空!"
);
}
if
(StringUtils.isEmpty(ip)) {
throw
new
NullPointerException(
"IP不能为空!"
);
}
ipStart = ipStart.trim();
ipEnd = ipEnd.trim();
ip = ip.trim();
final
String REGX_IP =
"((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"
;
final
String REGX_IPB = REGX_IP +
"\\-"
+ REGX_IP;
if
(!ipStart.matches(REGX_IP) || !ip.matches(REGX_IP) || !ipEnd.matches(REGX_IP)) {
return
false;
}
String[] sips = ipStart.split(
"\\."
);
String[] sipe = ipEnd.split(
"\\."
);
String[] sipt = ip.split(
"\\."
);
long ips = 0L, ipe = 0L, ipt = 0L;
for
(int i = 0; i < 4; ++i) {
ips = ips << 8 | Integer.parseInt(sips[i]);
ipe = ipe << 8 | Integer.parseInt(sipe[i]);
ipt = ipt << 8 | Integer.parseInt(sipt[i]);
}
if
(ips > ipe) {
long t = ips;
ips = ipe;
ipe = t;
}
return
ips <= ipt && ipt <= ipe;
}
}