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

📄 iplocalizer.java

📁 “JSP数据库项目案例导航”一书从第一章到第十一章各章实例的源程序文件以及数据库文件。 注意: 1. 本书中的案例提供的数据库环境不同
💻 JAVA
字号:


package net.acai.ip;
/**
 * Title:        阿菜网络
 * Description:
 * Copyright:    Copyright (c) 2002
 * Company:      www.justhis.com
 * @author:       acai
 * @version 1.0
 */

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

// Referenced classes of package net.xdevelop.ip:
//            AddressTable0, AddressTable1, IPTable3, IPTable0, 
//            IPTable1, IPTable2

public class IPLocalizer
{

    private IPLocalizer()
    {
    }

    public static String[] search(String ip)
    {
        String address[] = {
            "", ""
        };
        if(!validateIP(ip))
            return address;
        int pos = inRegion(ip);
        if(pos != -1)
        {
            if(pos >= 0 && pos < 500)
            {
                address[0] = AddressTable0.ADDRESS_TABLE0_CH[pos][0];
                address[1] = AddressTable0.ADDRESS_TABLE0_CH[pos][1];
            }
            if(pos >= 500 && pos < 1000)
            {
                address[0] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][0];
                address[1] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][1];
            }
            if(pos >= 1000 && pos < 1500)
            {
                address[0] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][0];
                address[1] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][1];
            }
            if(pos >= 1500 && pos < 2000)
            {
                address[0] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][0];
                address[1] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][1];
            }
            if(pos >= 2000 && pos < 2500)
            {
                address[0] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][0];
                address[1] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][1];
            }
            if(pos >= 2500 && pos < 3000)
            {
                address[0] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][0];
                address[1] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][1];
            }
            if(pos >= 3000 && pos < 3500)
            {
                address[0] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][0];
                address[1] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][1];
            }
            if(pos >= 3500 && pos < 4000)
            {
                address[0] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][0];
                address[1] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][1];
            }
        }
        return address;
    }

    public static String[] search(HttpServletRequest request)
    {
        String ip = request.getRemoteAddr();
        String address[] = {
            "", ""
        };
        int pos = inRegion(ip);
        if(pos != -1)
        {
            if(pos >= 0 && pos < 500)
            {
                address[0] = AddressTable0.ADDRESS_TABLE0_CH[pos][0];
                address[1] = AddressTable0.ADDRESS_TABLE0_CH[pos][1];
            }
            if(pos >= 500 && pos < 1000)
            {
                address[0] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][0];
                address[1] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][1];
            }
            if(pos >= 1000 && pos < 1500)
            {
                address[0] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][0];
                address[1] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][1];
            }
            if(pos >= 1500 && pos < 2000)
            {
                address[0] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][0];
                address[1] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][1];
            }
            if(pos >= 2000 && pos < 2500)
            {
                address[0] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][0];
                address[1] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][1];
            }
            if(pos >= 2500 && pos < 3000)
            {
                address[0] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][0];
                address[1] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][1];
            }
            if(pos >= 3000 && pos < 3500)
            {
                address[0] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][0];
                address[1] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][1];
            }
            if(pos >= 3500 && pos < 4000)
            {
                address[0] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][0];
                address[1] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][1];
            }
        }
        return address;
    }

    private static boolean validateIP(String ip)
    {
        boolean flag;
        try
        {
            int from = 0;
            int end = ip.indexOf(".", from);
            if(end == -1)
            {
                boolean flag1 = false;
                return flag1;
            }
            int ip3 = Integer.parseInt(ip.substring(from, end));
            from = end + 1;
            end = ip.indexOf(".", from);
            if(end == -1)
            {
                boolean flag2 = false;
                return flag2;
            }
            int ip2 = Integer.parseInt(ip.substring(from, end));
            from = end + 1;
            end = ip.indexOf(".", from);
            if(end == -1)
            {
                boolean flag3 = false;
                return flag3;
            }
            int ip1 = Integer.parseInt(ip.substring(from, end));
            int ip0 = Integer.parseInt(ip.substring(end + 1));
            if(ip3 > 255 || ip2 > 255 || ip1 > 255 || ip0 > 255 || ip3 < 0 || ip2 < 0 || ip1 < 0 || ip0 < 0)
            {
                boolean flag4 = false;
                return flag4;
            } else
            {
                boolean flag5 = true;
                return flag5;
            }
        }
        catch(Exception e)
        {
            flag = false;
        }
        return flag;
    }

    private static int inRegion(String ip)
    {
        int pos = -1;
        int from = 0;
        int end = ip.indexOf(".", from);
        int ip3 = Integer.parseInt(ip.substring(from, end));
        from = end + 1;
        end = ip.indexOf(".", from);
        int ip2 = Integer.parseInt(ip.substring(from, end));
        from = end + 1;
        end = ip.indexOf(".", from);
        int ip1 = Integer.parseInt(ip.substring(from, end));
        int ip0 = Integer.parseInt(ip.substring(end + 1));
        long ipVisitor = (long)ip3 * (long)0x1000000 + (long)(ip2 * 0x10000) + (long)(ip1 * 256) + (long)ip0;
        for(int i = 0; i < IP_TABLE.length; i++)
        {
            ip3 = Integer.parseInt(IP_TABLE[i][0].substring(0, 3));
            ip2 = Integer.parseInt(IP_TABLE[i][0].substring(4, 7));
            ip1 = Integer.parseInt(IP_TABLE[i][0].substring(8, 11));
            ip0 = Integer.parseInt(IP_TABLE[i][0].substring(12, 15));
            long ipBegin = (long)ip3 * (long)0x1000000 + (long)(ip2 * 0x10000) + (long)(ip1 * 256) + (long)ip0;
            ip3 = Integer.parseInt(IP_TABLE[i][1].substring(0, 3));
            ip2 = Integer.parseInt(IP_TABLE[i][1].substring(4, 7));
            ip1 = Integer.parseInt(IP_TABLE[i][1].substring(8, 11));
            ip0 = Integer.parseInt(IP_TABLE[i][1].substring(12, 15));
            long ipEnd = (long)ip3 * (long)0x1000000 + (long)(ip2 * 0x10000) + (long)(ip1 * 256) + (long)ip0;
            if(ipVisitor >= ipBegin && ipVisitor <= ipEnd)
                pos = i;
        }

        return pos;
    }

    public static String IP_TABLE[][];

    static 
    {
        IP_TABLE = new String[3000 + IPTable3.IP_TABLE.length][2];
        for(int i = 0; i < IPTable0.IP_TABLE.length; i++)
        {
            IP_TABLE[i][0] = IPTable0.IP_TABLE[i][0];
            IP_TABLE[i][1] = IPTable0.IP_TABLE[i][1];
            IP_TABLE[1000 + i][0] = IPTable1.IP_TABLE[i][0];
            IP_TABLE[1000 + i][1] = IPTable1.IP_TABLE[i][1];
            IP_TABLE[2000 + i][0] = IPTable2.IP_TABLE[i][0];
            IP_TABLE[2000 + i][1] = IPTable2.IP_TABLE[i][1];
        }

        for(int i = 0; i < IPTable3.IP_TABLE.length; i++)
        {
            IP_TABLE[3000 + i][0] = IPTable3.IP_TABLE[i][0];
            IP_TABLE[3000 + i][1] = IPTable3.IP_TABLE[i][1];
        }

    }
}

⌨️ 快捷键说明

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