文档章节

IP相关工具类

蓝汀华韶
 蓝汀华韶
发布于 2016/04/19 17:17
字数 319
阅读 23
收藏 1
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.regex.Pattern;

/**
 * Created by IDEA
 * User: mashaohua
 * Date: 2016-04-13 9:13
 * Desc:
 */
public class IPUtil {

    /**
     * 获取客户端ip
     *
     */
    public static String getIp(HttpServletRequest request) {

        String ipAddress = request.getHeader("x-forwarded-for");

        if(!verifyIp(ipAddress)) {
            ipAddress = request.getHeader("X-Real-IP");
            if(!verifyIp(ipAddress)) {
                ipAddress = request.getHeader("Proxy-Client-IP");
                if(!verifyIp(ipAddress)) {
                    ipAddress = request.getHeader("WL-Proxy-Client-IP");
                    if(!verifyIp(ipAddress)) {
                        ipAddress = request.getRemoteAddr();
                        if(ipAddress.equals("127.0.0.1")){
                            //根据网卡取本机配置的IP
                            InetAddress inet = null;
                            try {
                                inet = InetAddress.getLocalHost();
                                ipAddress = inet.getHostAddress();
                            } catch (UnknownHostException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
        //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
        if(ipAddress != null && ipAddress.length() > 15){ //"***.***.***.***".length() = 15
            if(ipAddress.indexOf(",") > 0){
                ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
            }
        }

        return ipAddress;
    }


    private final static Pattern ipPattern = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");

    public static boolean verifyIp(String ip) {
        if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip))
            return false;

        return ipPattern.matcher(ip).matches();
    }

    public static long ipToLong(String ip){
        long[] array = new long[4];
        int position1 = ip.indexOf(".");
        int position2 = ip.indexOf(".", position1 + 1);
        int position3 = ip.indexOf(".", position2 + 1);
        array[0] = Long.parseLong(ip.substring(0, position1));
        array[1] = Long.parseLong(ip.substring(position1+1, position2));
        array[2] = Long.parseLong(ip.substring(position2+1, position3));
        array[3] = Long.parseLong(ip.substring(position3+1));
        return (array[0] << 24) + (array[1] << 16) + (array[2] << 8) + array[3];
    }

    public static String ipToString(long ip){
        StringBuffer sb = new StringBuffer("");
        sb.append(String.valueOf((ip >>> 24)));
        sb.append(".");
        sb.append(String.valueOf((ip & 0x00FFFFFF) >>> 16));
        sb.append(".");
        sb.append(String.valueOf((ip & 0x0000FFFF) >>> 8));
        sb.append(".");
        sb.append(String.valueOf((ip & 0x000000FF)));
        return sb.toString();
    }
}


© 著作权归作者所有

共有 人打赏支持
蓝汀华韶
粉丝 36
博文 77
码字总数 80082
作品 0
海淀
程序员
自己做工具--封装PHP的工具类

更多精彩请访问,请一定记得 star :https://github.com/whm19940308/phpTools 转载请标明原文链接:https://www.jianshu.com/p/8ab3dce8d6f1 一、使用示例 二、代码目录 主要有几大工具类:...

whmblog
08/26
0
0
Linux系统管理第五周作业【Linux微职位】

1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥(Network Bridge):工作在OSI模型的第二层数据链路层,主要用于将两个局域网(LAN)连起来,根据MAC地址...

akatsuki1023
06/29
0
0
2018年上半年短视频行业黑灰产研究报告

      声明:   本报告版权属于威胁猎人情报中心,与FreeBuf独家联合发布,并受法律保护。转载、摘编或利用其它方式使用本报告文字或者观点的,应注明“来源:威胁猎人 ”。违反上述声...

FreeBuf
08/23
0
0
Java微信公众平台开发_02_启用服务器配置

一、准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:【 Java微信公众平台开发01本地服务器映射外网 】 2.一个微信公众平台账号: 去注册:(https://mp.weixin.qq.com/) 3.策略...

rayner
2017/11/01
0
0
《游戏安全——手游安全技术入门》读后知识点提炼

《游戏安全——手游安全技术入门》读后知识点提炼 @(读书)[外挂 手游] ----------[TOC] 前言 下文中有“”标志的,代表从知识点中的联想。 下文均为知识点提炼,所以不一定是书中原话。不提炼...

i不歪
2016/07/08
243
0

没有更多内容

加载失败,请刷新页面

加载更多

Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
今天
1
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
今天
2
0
TiDB 在爱奇艺的应用及实践

爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...

TiDB
今天
1
0
Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
3
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部