123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package com.chinacreator.videoalliance.order.util;
- 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;
- import org.apache.commons.lang.StringUtils;
- import org.apache.log4j.Logger;
- public class IpAddrUtil {
-
- private static Logger logger = Logger.getLogger("iplog");
-
- public static String getIpAddr2(HttpServletRequest request) {
- String ip = request.getHeader("X-Real-IP");
- if (inValidateIpAddr2(ip)) {
- ip = request.getHeader("X-Forwarded-For");
- }
- if (inValidateIpAddr2(ip)) {
- ip = request.getHeader("Proxy-Client-IP");
- }
- if (inValidateIpAddr2(ip)) {
- ip = request.getHeader("WL-Proxy-Client-IP");
- }
- if (inValidateIpAddr2(ip)) {
- ip = request.getHeader("clientip");
- }
- if (inValidateIpAddr2(ip)) {
- ip = request.getRemoteAddr();
- }
- if (inValidateIpAddr2(ip)) {
- ip = "null";
- } else {
- int index = ip.indexOf(",");
- if (index != -1) {
- ip = ip.substring(0, index);
- }
- }
- return ip;
- }
-
- private static boolean inValidateIpAddr2(String ip) {
- return (ip == null) || (ip.length() == 0) || ("unknown".equalsIgnoreCase(ip));
- }
- public static String getIpAddr(HttpServletRequest request) {
- String ip = request.getHeader("X-Real-IP");
- if (inValidateIpAddr(ip)) {
- ip = request.getHeader("X-Forwarded-For");
- }
- if (inValidateIpAddr(ip)) {
- ip = request.getHeader("Proxy-Client-IP");
- }
- if (inValidateIpAddr(ip)) {
- ip = request.getHeader("WL-Proxy-Client-IP");
- }
- if (inValidateIpAddr(ip)) {
- ip = request.getHeader("clientip");
- }
- if (inValidateIpAddr(ip)) {
- ip = request.getRemoteAddr();
- }
- if (inValidateIpAddr(ip)) {
- ip = "null";
- } else {
- int index = ip.indexOf(",");
- if (index != -1) {
- ip = ip.substring(0, index);
- }
- }
- return ip;
- }
- /**
- * ip地址是否有效
- *
- * @param ip
- * @return true:无效,false有效
- */
- private static boolean inValidateIpAddr(String ip) {
- return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || ip.startsWith("10.") || ip.startsWith("172.") || ip.startsWith("192.");
- }
- public static String getHostIp() {
- try {
- Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
- while (en.hasMoreElements()) {
- NetworkInterface intf = (NetworkInterface) en.nextElement();
- Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
- while (enumIpAddr.hasMoreElements()) {
- InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
- if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
- return inetAddress.getHostAddress().toString();
- }
- }
- }
- } catch (SocketException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- /**
- * 获取所有IP
- * @param request
- * @param channel
- * @return
- */
- public static List<String> getIpAddrList(HttpServletRequest request, String channel) {
- printHeader(request, channel);
- return getHeaderIps(request,channel);
- }
-
- /**
- * 输出IP地址信息
- * @param request
- */
- private static StringBuffer printHeader(HttpServletRequest request, String channel){
- StringBuffer sb = new StringBuffer();
- //sb.append("==============渠道=>"+channel+", header信息==============\r\n");
- //logger.info("remoteaddr=>"+request.getRemoteAddr());
- sb.append("name=>remoteaddr, value=>"+request.getRemoteAddr()+"\r\n");
- Enumeration er = request.getHeaderNames();//获取请求头的所有name值
- while(er.hasMoreElements()){
- String name =(String) er.nextElement();
- String value = request.getHeader(name);
- sb.append("name=>"+name+", value=>"+value+"\r\n");
- }
- logger.info("\r\n================渠道=>"+channel+"的header信息=>\r\n"+sb.toString());
- return sb;
- }
-
- /***
- * 到请求头获取所有IP地址
- * @param request
- * @param channel 调用渠道标识
- * @param remoteAddrChannel 需要取remoteAddr的IP的渠道
- * @return
- */
- public static List<String> getHeaderIps(HttpServletRequest request, String channel) {
- List<String> ipList = new ArrayList<String>();
- addIps(ipList,request.getHeader("X-Forwarded-For"));
- addIps(ipList,request.getHeader("X-Real-IP"));
- addIps(ipList,request.getHeader("Proxy-Client-IP"));
- addIps(ipList,request.getHeader("WL-Proxy-Client-IP"));
- addIps(ipList,request.getHeader("clientip"));
- //X-Forwarded-For无值再到getRemoteAddr取
- if(StringUtils.isEmpty(request.getHeader("X-Forwarded-For"))){
- //是否有限制取remoteaddr的渠道
- addIps(ipList,request.getRemoteAddr());
- }
-
- return ipList;
- }
-
- /**
- * 添加IP到List,重复IP不添加
- * @param ipList
- * @param getip
- */
- private static void addIps(List<String> ipList, String getip){
- //IP不能为空
- if(StringUtils.isNotEmpty(getip)){
- //可能有多个IP,用,分隔
- String [] arrayip = getip.split(",");
- for(String tmp : arrayip){
- if(StringUtils.isNotEmpty(tmp)
- && StringUtils.isNotEmpty(tmp.trim())
- && !ipList.contains(tmp.trim())){
- //添加数据,重复不添加
- ipList.add(tmp.trim());
- }
- }
- }
- }
- }
|