⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipmonitor.java

📁 云网论坛CWBBS 源码,内容丰富,学习,参考,教学的好资料,具体见内说明,
💻 JAVA
字号:
package com.redmoon.forum.security;

import javax.servlet.http.HttpServletRequest;
import cn.js.fan.web.SkinUtil;
import com.redmoon.forum.*;
import cn.js.fan.util.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class IPMonitor {
    private String message;

    public IPMonitor() {
    }

    public boolean isValid(HttpServletRequest req, String ip) {
        if (ip == null || ip.trim().equals(""))
            return true;
        ForbidIPDb fid = new ForbidIPDb();
        fid = fid.getForbidIPDb(ip);
        // System.out.println("userservice.java ip=" + ip);
        if (fid.isLoaded()) {
            String str = SkinUtil.LoadString(req,
                                             "res.forum.security.IPMonitor",
                                             "err_forbidden");
            message = str + fid.getReason();
            return false;
        }

        ForbidIPRangeDb fir = new ForbidIPRangeDb();
        if (!fir.isValid(ip)) {
            String str = SkinUtil.LoadString(req,
                                             "res.forum.security.IPMonitor",
                                             "err_forbidden");
            message = str + fir.getReason();
            return false;
        }
        return true;
    }

    /**
     * IP格工是否合法,IP中可以含有通配符,必须为四段由.分隔的地址,IPV6地址不支持
     * @param ip String
     * @return boolean
     */
    public static boolean isIPFormatValid(String ip) {
        String[] ips = ip.split("\n");
        for (int i = 0; i < ips.length; i++) {
            if (!ips[i].trim().matches("^([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$") &&
                !ips[i].trim().matches("^([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.\\*$") &&
                !ips[i].trim().matches("^([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.\\*\\.\\*$") &&
                !ips[i].trim().matches(
                        "^([01]?[0-9][0-9]|[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\\.\\*\\.\\*\\.\\*$")) {
                return false;
            }
        }
        return true;
    }

    public boolean isIPOfRegistSpecialScope(String ip) {
        RegConfig rcfg = new RegConfig();
        String[] ips = rcfg.getStringArrProperty("specialIPRegCtrl");
        if (ips == null)
            return false;
        if (ip == null || ip.trim().equals(""))
            return false;
        return isIPOfScope(ip, ips);
    }

    public boolean isIPCanVisit(String ip) {
        RegConfig rcfg = new RegConfig();
        String sList = rcfg.getProperty("IPVisitList").trim();
        if (sList.equals(""))
            return true;
        String[] ips = null;
        ips = StrUtil.split(sList, "\n");
        if (ips == null)
            return true;
        if (ip == null || ip.trim().equals(""))
            return false;
        return isIPOfScope(ip, ips);
    }

    public boolean isIPOfScope(String ip, String[] ips) {
        String[] ary = StrUtil.split(ip, "\\.");
        String u = "";
        int len = ary.length;
        for (int j = 0; j < len; j++) {
            if (ary[j].length() < 3)
                ary[j] = StrUtil.PadString(ary[j], '0', 3, true);
            u += ary[j];
        }

        // 不足12位的,则补齐
        if (u.length()<12)
            u = StrUtil.PadString(u, '0', 12, false);
        // System.out.println(getClass() + " len=" + len + " user ip=" + u);

        long ul = 0;
        try {
            ul = Long.parseLong(u);
        } catch (Exception e) {
            return false;
        }

        String e = "", b = "";

        len = ips.length;
        for (int i = 0; i < len; i++) {
            e = "";
            b = "";
            // System.out.println(getClass() + " len=" + len + " ips[i]=" + ips[i]);
            String[] ary1 = StrUtil.split(ips[i], "\\.");
            int alen = ary1.length;

            for (int k = 0; k < alen; k++) {
                if (!ary1[k].equals("*")) {
                    if (ary1[k].length() < 3)
                        ary1[k] = StrUtil.PadString(ary1[k], '0', 3, true);
                    b += ary1[k];
                    e += ary1[k];
                } else {
                    b += "000";
                    e += "255";
                }
            }

            if (b.length()<12)
                b = StrUtil.PadString(b, '0', 12, false);
            if (e.length()<12)
                e = StrUtil.PadString(e, '0', 12, false);
            long bl = Long.parseLong(b);
            long el = Long.parseLong(e);

            if (ul >= bl && ul <= el) {
                return true;
            }
        }
        return false;
    }

    // IP访问验证
    public boolean isIPCanAdmin(String ip) {
        RegConfig rcfg = new RegConfig();
        String[] ips = rcfg.getStringArrProperty("adminIPVisitList");
        if (ips == null)
            return true;
        if (ip == null || ip.trim().equals(""))
            return true;

        return isIPOfScope(ip, ips);
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -