????private?static?String?getRemoteIp(HttpServletRequest?request)?{
????????//x-forwarded-for:代表客戶端,也就是HTTP的請求端真實的IP,只有在通過了HTTP代理或者負載均衡服務器時才會添加該項
????????String?ip?=?request.getHeader("x-forwarded-for");
????????//Proxy-Client-IP和WL-Proxy-Client-IP:?只有在Apache(Weblogic?Plug-In?Enable)+WebLogic搭配下出現,其中“WL”就是WebLogic的縮寫
????????//訪問路徑是:Client?->?Apache?WebServer?+?Weblogic?http?plugin?->?Weblogic?Instances
????????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.getRemoteAddr();
????????}
//????????ip?=?"61.51.253.90";
//????????ip?=?"218.25.19.153";
????????//0:0:0:0:0:0:0:1:?IPV6的形式,win7下可能會出現
????????//獲取遠程IP地址
?
????????return?"0:0:0:0:0:0:0:1".equals(ip)???"127.0.0.1"?:?ip;
????}這段代碼只能返回0:0:0:0:0:0:0:1
2 回答

言曌博客liuyanzhao_com
TA貢獻164條經驗 獲得超117個贊
//獲得物理ip public?static?String?getIpAddr(HttpServletRequest?request){ ????String?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")?||?ipAddress.equals("0:0:0:0:0: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(",")); ????????} ????} ????return?ipAddress; }
添加回答
舉報
0/150
提交
取消