Rumah > Java > Javabermula > java实现判断ip是否在指定ip区间的工具类

java实现判断ip是否在指定ip区间的工具类

王林
Lepaskan: 2020-09-10 17:45:59
ke hadapan
2769 orang telah melayarinya

java实现判断ip是否在指定ip区间的工具类

思路:

利用ip和ip区间两端的值调用ipIsValid方法。

(视频教程推荐:java课程

工具类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

import org.apache.commons.lang.StringUtils;

import org.springframework.web.context.request.RequestContextHolder;

import org.springframework.web.context.request.ServletRequestAttributes;

 

import javax.servlet.http.HttpServletRequest;

 

 

public class IPUtil {

 

    /**

     * 获得当前ip

     * @return

     */

    public static String getIP(){

        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

        if(servletRequestAttributes == null) {

            return "127.0.0.1";

        }

 

        HttpServletRequest request = servletRequestAttributes.getRequest();

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

        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.getHeader("HTTP_CLIENT_IP");

        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getHeader("HTTP_X_FORWARDED_FOR");

        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getRemoteAddr();

        }

        if ("0:0:0:0:0:0:0:1".equals(ip)) {

            ip = "127.0.0.1";

        }

        return ip;

    }

 

    /**

     * 判断IP是否在指定范围

     * @param ipStart

     * @param ipEnd

     * @param ip

     * @return

     */

    public static boolean ipIsValid(String ipStart,String ipEnd, String ip) {

        if (StringUtils.isEmpty(ipStart)) {

            throw new NullPointerException("起始IP不能为空!");

        }

        if (StringUtils.isEmpty(ipEnd)) {

            throw new NullPointerException("结束IP不能为空!");

        }

        if (StringUtils.isEmpty(ip)) {

            throw new NullPointerException("IP不能为空!");

        }

        ipStart = ipStart.trim();

        ipEnd = ipEnd.trim();

        ip = ip.trim();

        final String REGX_IP = "((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";

        final String REGX_IPB = REGX_IP + "\\-" + REGX_IP;

        if (!ipStart.matches(REGX_IP) || !ip.matches(REGX_IP) || !ipEnd.matches(REGX_IP)) {

            return false;

        }

        String[] sips = ipStart.split("\\.");

        String[] sipe = ipEnd.split("\\.");

        String[] sipt = ip.split("\\.");

        long ips = 0L, ipe = 0L, ipt = 0L;

        for (int i = 0; i < 4; ++i) {

            ips = ips << 8 | Integer.parseInt(sips[i]);

            ipe = ipe << 8 | Integer.parseInt(sipe[i]);

            ipt = ipt << 8 | Integer.parseInt(sipt[i]);

        }

        if (ips > ipe) {

            long t = ips;

            ips = ipe;

            ipe = t;

        }

        return ips <= ipt && ipt <= ipe;

    }

 

 

}

Salin selepas log masuk

 相关教程推荐:java入门教程

Atas ialah kandungan terperinci java实现判断ip是否在指定ip区间的工具类. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan