文档章节

IP相关工具类

蓝汀华韶
 蓝汀华韶
发布于 2016/04/19 17:17
字数 319
阅读 23
收藏 1
点赞 1
评论 0
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();
    }
}


© 著作权归作者所有

共有 人打赏支持
蓝汀华韶
粉丝 35
博文 77
码字总数 80082
作品 0
海淀
程序员
Linux系统管理第五周作业【Linux微职位】

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

akatsuki1023
06/29
0
0
根据ip查找ISP运营商和归属地的几种方法

一般来说都是根据网上流传的各种IP库来解析获取对应的ISP和归属地的, 除非有实力的公司自己从运营商获取数据,然后做数据分析得到。 下面介绍前者,如何利用网上的IP库获取这类信息: 1、利...

大数据之路
2012/07/16
0
0
《游戏安全——手游安全技术入门》读后知识点提炼

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

i不歪
2016/07/08
243
0
python 代理池升级版v1.1

python 代理池升级版v1.1 概述 前段时间,因为项目的需要,简单的实现了一个代理池,只是实现了预想的基本功能,后边想在完善。可是没想到我太(tai)忙(lan)了(le),之前也有反馈各种bug,一直...

起个名忒难
2017/11/12
0
0
网络包排错指南-类linux 平台

网络包排错指南-类linux 平台 背景信息 最近一直在测试k8s,如果你了解或者解接触过docker,那你一定知道docker 相关的网络很大部分在桥接、路由、Iptables 上做文章。如果你凑巧接触过k8s,并且...

yoke88
05/10
0
0
网络异常测试初探

开发或者测试互联网产品的过程中,同学们一定遇到过connection timed out和socket read timed out两种和网络相关的异常。今天我们并不分析引起这些异常的原因,也不谈发生异常以后的解决办法...

网络
2013/11/24
0
0
大数据时代,如何利用SEO数据进行决策和分析?

  在这个人人都高喊“大数据时代”的今天,数据似乎被推到了一个前所未有的高度。无论是个人站长还是大中型公司,亦或是大型跨国集团,无论是网络营销还是线下的市场营销都在意识到数据的重...

大数据头条
01/04
0
0
Linux流量监控工具 (实时)-适用于centos

Linux流量监控工具 (实时)-适用于centos 在类Unix系统中可以使用top查看系统资源、进程、内存占用等信息。查看网络状态可以使用netstat、nmap等工具。若要查看实时的网络流量,监控TCP/IP连...

Neo_
2012/09/07
0
1
PHPStorm 2017.1 发布,PHP 集成开发环境

PHPStorm无疑是开发PHP项目的神器,秉承着JetBrains家族的优良传统,是用来写世界上最好的语言的不二选择。在今天迎来了最新的2017.1版本,一接到通知邮件,我就迫不及待的更新了新版本,并查...

panlatent
2017/03/24
6.6K
41
Java技巧: 根据网址查询DNS/IP地址

需求: 给定一个URL地址, 例如: , 解析对应的IP地址和端口号。 说明: 本文不涉及底层的 DNS 协议, 直接使用Java平台提供的API进行操作。 DNS也就是 Domain Name Service,即 域名服务。 我们知...

renfufei
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
4
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
172
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部