55a3250b3730c31af20545e8900d71ecf37a099f.svn-base 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package com.chinacreator.videoalliance.order.util;
  2. import java.net.InetAddress;
  3. import java.net.NetworkInterface;
  4. import java.net.SocketException;
  5. import java.util.ArrayList;
  6. import java.util.Enumeration;
  7. import java.util.List;
  8. import javax.servlet.http.HttpServletRequest;
  9. import org.apache.commons.lang.StringUtils;
  10. import org.apache.log4j.Logger;
  11. public class IpAddrUtil {
  12. private static Logger logger = Logger.getLogger("iplog");
  13. public static String getIpAddr2(HttpServletRequest request) {
  14. String ip = request.getHeader("X-Real-IP");
  15. if (inValidateIpAddr2(ip)) {
  16. ip = request.getHeader("X-Forwarded-For");
  17. }
  18. if (inValidateIpAddr2(ip)) {
  19. ip = request.getHeader("Proxy-Client-IP");
  20. }
  21. if (inValidateIpAddr2(ip)) {
  22. ip = request.getHeader("WL-Proxy-Client-IP");
  23. }
  24. if (inValidateIpAddr2(ip)) {
  25. ip = request.getHeader("clientip");
  26. }
  27. if (inValidateIpAddr2(ip)) {
  28. ip = request.getRemoteAddr();
  29. }
  30. if (inValidateIpAddr2(ip)) {
  31. ip = "null";
  32. } else {
  33. int index = ip.indexOf(",");
  34. if (index != -1) {
  35. ip = ip.substring(0, index);
  36. }
  37. }
  38. return ip;
  39. }
  40. private static boolean inValidateIpAddr2(String ip) {
  41. return (ip == null) || (ip.length() == 0) || ("unknown".equalsIgnoreCase(ip));
  42. }
  43. public static String getIpAddr(HttpServletRequest request) {
  44. String ip = request.getHeader("X-Real-IP");
  45. if (inValidateIpAddr(ip)) {
  46. ip = request.getHeader("X-Forwarded-For");
  47. }
  48. if (inValidateIpAddr(ip)) {
  49. ip = request.getHeader("Proxy-Client-IP");
  50. }
  51. if (inValidateIpAddr(ip)) {
  52. ip = request.getHeader("WL-Proxy-Client-IP");
  53. }
  54. if (inValidateIpAddr(ip)) {
  55. ip = request.getHeader("clientip");
  56. }
  57. if (inValidateIpAddr(ip)) {
  58. ip = request.getRemoteAddr();
  59. }
  60. if (inValidateIpAddr(ip)) {
  61. ip = "null";
  62. } else {
  63. int index = ip.indexOf(",");
  64. if (index != -1) {
  65. ip = ip.substring(0, index);
  66. }
  67. }
  68. return ip;
  69. }
  70. /**
  71. * ip地址是否有效
  72. *
  73. * @param ip
  74. * @return true:无效,false有效
  75. */
  76. private static boolean inValidateIpAddr(String ip) {
  77. return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || ip.startsWith("10.") || ip.startsWith("172.") || ip.startsWith("192.");
  78. }
  79. public static String getHostIp() {
  80. try {
  81. Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
  82. while (en.hasMoreElements()) {
  83. NetworkInterface intf = (NetworkInterface) en.nextElement();
  84. Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
  85. while (enumIpAddr.hasMoreElements()) {
  86. InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
  87. if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) {
  88. return inetAddress.getHostAddress().toString();
  89. }
  90. }
  91. }
  92. } catch (SocketException e) {
  93. e.printStackTrace();
  94. }
  95. return null;
  96. }
  97. /**
  98. * 获取所有IP
  99. * @param request
  100. * @param channel
  101. * @return
  102. */
  103. public static List<String> getIpAddrList(HttpServletRequest request, String channel) {
  104. printHeader(request, channel);
  105. return getHeaderIps(request,channel);
  106. }
  107. /**
  108. * 输出IP地址信息
  109. * @param request
  110. */
  111. private static StringBuffer printHeader(HttpServletRequest request, String channel){
  112. StringBuffer sb = new StringBuffer();
  113. //sb.append("==============渠道=>"+channel+", header信息==============\r\n");
  114. //logger.info("remoteaddr=>"+request.getRemoteAddr());
  115. sb.append("name=>remoteaddr, value=>"+request.getRemoteAddr()+"\r\n");
  116. Enumeration er = request.getHeaderNames();//获取请求头的所有name值
  117. while(er.hasMoreElements()){
  118. String name =(String) er.nextElement();
  119. String value = request.getHeader(name);
  120. sb.append("name=>"+name+", value=>"+value+"\r\n");
  121. }
  122. logger.info("\r\n================渠道=>"+channel+"的header信息=>\r\n"+sb.toString());
  123. return sb;
  124. }
  125. /***
  126. * 到请求头获取所有IP地址
  127. * @param request
  128. * @param channel 调用渠道标识
  129. * @param remoteAddrChannel 需要取remoteAddr的IP的渠道
  130. * @return
  131. */
  132. public static List<String> getHeaderIps(HttpServletRequest request, String channel) {
  133. List<String> ipList = new ArrayList<String>();
  134. addIps(ipList,request.getHeader("X-Forwarded-For"));
  135. addIps(ipList,request.getHeader("X-Real-IP"));
  136. addIps(ipList,request.getHeader("Proxy-Client-IP"));
  137. addIps(ipList,request.getHeader("WL-Proxy-Client-IP"));
  138. addIps(ipList,request.getHeader("clientip"));
  139. //X-Forwarded-For无值再到getRemoteAddr取
  140. if(StringUtils.isEmpty(request.getHeader("X-Forwarded-For"))){
  141. //是否有限制取remoteaddr的渠道
  142. addIps(ipList,request.getRemoteAddr());
  143. }
  144. return ipList;
  145. }
  146. /**
  147. * 添加IP到List,重复IP不添加
  148. * @param ipList
  149. * @param getip
  150. */
  151. private static void addIps(List<String> ipList, String getip){
  152. //IP不能为空
  153. if(StringUtils.isNotEmpty(getip)){
  154. //可能有多个IP,用,分隔
  155. String [] arrayip = getip.split(",");
  156. for(String tmp : arrayip){
  157. if(StringUtils.isNotEmpty(tmp)
  158. && StringUtils.isNotEmpty(tmp.trim())
  159. && !ipList.contains(tmp.trim())){
  160. //添加数据,重复不添加
  161. ipList.add(tmp.trim());
  162. }
  163. }
  164. }
  165. }
  166. }