IPLocalizer.java
上传用户:toby834
上传日期:2013-10-21
资源大小:2613k
文件大小:8k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. package net.acai.ip;
  2. /**
  3.  * Title:        清清网络
  4.  * Description:
  5.  * Copyright:    Copyright (c) 2002
  6.  * Company:      www.SuperSpace.com
  7.  * @author:       SuperSpace
  8.  * @version 1.0
  9.  */
  10. import javax.servlet.ServletRequest;
  11. import javax.servlet.http.HttpServletRequest;
  12. // Referenced classes of package net.xdevelop.ip:
  13. //            AddressTable0, AddressTable1, IPTable3, IPTable0, 
  14. //            IPTable1, IPTable2
  15. public class IPLocalizer
  16. {
  17.     private IPLocalizer()
  18.     {
  19.     }
  20.     public static String[] search(String ip)
  21.     {
  22.         String address[] = {
  23.             "", ""
  24.         };
  25.         if(!validateIP(ip))
  26.             return address;
  27.         int pos = inRegion(ip);
  28.         if(pos != -1)
  29.         {
  30.             if(pos >= 0 && pos < 500)
  31.             {
  32.                 address[0] = AddressTable0.ADDRESS_TABLE0_CH[pos][0];
  33.                 address[1] = AddressTable0.ADDRESS_TABLE0_CH[pos][1];
  34.             }
  35.             if(pos >= 500 && pos < 1000)
  36.             {
  37.                 address[0] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][0];
  38.                 address[1] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][1];
  39.             }
  40.             if(pos >= 1000 && pos < 1500)
  41.             {
  42.                 address[0] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][0];
  43.                 address[1] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][1];
  44.             }
  45.             if(pos >= 1500 && pos < 2000)
  46.             {
  47.                 address[0] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][0];
  48.                 address[1] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][1];
  49.             }
  50.             if(pos >= 2000 && pos < 2500)
  51.             {
  52.                 address[0] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][0];
  53.                 address[1] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][1];
  54.             }
  55.             if(pos >= 2500 && pos < 3000)
  56.             {
  57.                 address[0] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][0];
  58.                 address[1] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][1];
  59.             }
  60.             if(pos >= 3000 && pos < 3500)
  61.             {
  62.                 address[0] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][0];
  63.                 address[1] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][1];
  64.             }
  65.             if(pos >= 3500 && pos < 4000)
  66.             {
  67.                 address[0] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][0];
  68.                 address[1] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][1];
  69.             }
  70.         }
  71.         return address;
  72.     }
  73.     public static String[] search(HttpServletRequest request)
  74.     {
  75.         String ip = request.getRemoteAddr();
  76.         String address[] = {
  77.             "", ""
  78.         };
  79.         int pos = inRegion(ip);
  80.         if(pos != -1)
  81.         {
  82.             if(pos >= 0 && pos < 500)
  83.             {
  84.                 address[0] = AddressTable0.ADDRESS_TABLE0_CH[pos][0];
  85.                 address[1] = AddressTable0.ADDRESS_TABLE0_CH[pos][1];
  86.             }
  87.             if(pos >= 500 && pos < 1000)
  88.             {
  89.                 address[0] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][0];
  90.                 address[1] = AddressTable0.ADDRESS_TABLE1_CH[pos - 500][1];
  91.             }
  92.             if(pos >= 1000 && pos < 1500)
  93.             {
  94.                 address[0] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][0];
  95.                 address[1] = AddressTable0.ADDRESS_TABLE2_CH[pos - 1000][1];
  96.             }
  97.             if(pos >= 1500 && pos < 2000)
  98.             {
  99.                 address[0] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][0];
  100.                 address[1] = AddressTable0.ADDRESS_TABLE3_CH[pos - 1500][1];
  101.             }
  102.             if(pos >= 2000 && pos < 2500)
  103.             {
  104.                 address[0] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][0];
  105.                 address[1] = AddressTable1.ADDRESS_TABLE4_CH[pos - 2000][1];
  106.             }
  107.             if(pos >= 2500 && pos < 3000)
  108.             {
  109.                 address[0] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][0];
  110.                 address[1] = AddressTable1.ADDRESS_TABLE5_CH[pos - 2500][1];
  111.             }
  112.             if(pos >= 3000 && pos < 3500)
  113.             {
  114.                 address[0] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][0];
  115.                 address[1] = AddressTable1.ADDRESS_TABLE6_CH[pos - 3000][1];
  116.             }
  117.             if(pos >= 3500 && pos < 4000)
  118.             {
  119.                 address[0] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][0];
  120.                 address[1] = AddressTable1.ADDRESS_TABLE7_CH[pos - 3500][1];
  121.             }
  122.         }
  123.         return address;
  124.     }
  125.     private static boolean validateIP(String ip)
  126.     {
  127.         boolean flag;
  128.         try
  129.         {
  130.             int from = 0;
  131.             int end = ip.indexOf(".", from);
  132.             if(end == -1)
  133.             {
  134.                 boolean flag1 = false;
  135.                 return flag1;
  136.             }
  137.             int ip3 = Integer.parseInt(ip.substring(from, end));
  138.             from = end + 1;
  139.             end = ip.indexOf(".", from);
  140.             if(end == -1)
  141.             {
  142.                 boolean flag2 = false;
  143.                 return flag2;
  144.             }
  145.             int ip2 = Integer.parseInt(ip.substring(from, end));
  146.             from = end + 1;
  147.             end = ip.indexOf(".", from);
  148.             if(end == -1)
  149.             {
  150.                 boolean flag3 = false;
  151.                 return flag3;
  152.             }
  153.             int ip1 = Integer.parseInt(ip.substring(from, end));
  154.             int ip0 = Integer.parseInt(ip.substring(end + 1));
  155.             if(ip3 > 255 || ip2 > 255 || ip1 > 255 || ip0 > 255 || ip3 < 0 || ip2 < 0 || ip1 < 0 || ip0 < 0)
  156.             {
  157.                 boolean flag4 = false;
  158.                 return flag4;
  159.             } else
  160.             {
  161.                 boolean flag5 = true;
  162.                 return flag5;
  163.             }
  164.         }
  165.         catch(Exception e)
  166.         {
  167.             flag = false;
  168.         }
  169.         return flag;
  170.     }
  171.     private static int inRegion(String ip)
  172.     {
  173.         int pos = -1;
  174.         int from = 0;
  175.         int end = ip.indexOf(".", from);
  176.         int ip3 = Integer.parseInt(ip.substring(from, end));
  177.         from = end + 1;
  178.         end = ip.indexOf(".", from);
  179.         int ip2 = Integer.parseInt(ip.substring(from, end));
  180.         from = end + 1;
  181.         end = ip.indexOf(".", from);
  182.         int ip1 = Integer.parseInt(ip.substring(from, end));
  183.         int ip0 = Integer.parseInt(ip.substring(end + 1));
  184.         long ipVisitor = (long)ip3 * (long)0x1000000 + (long)(ip2 * 0x10000) + (long)(ip1 * 256) + (long)ip0;
  185.         for(int i = 0; i < IP_TABLE.length; i++)
  186.         {
  187.             ip3 = Integer.parseInt(IP_TABLE[i][0].substring(0, 3));
  188.             ip2 = Integer.parseInt(IP_TABLE[i][0].substring(4, 7));
  189.             ip1 = Integer.parseInt(IP_TABLE[i][0].substring(8, 11));
  190.             ip0 = Integer.parseInt(IP_TABLE[i][0].substring(12, 15));
  191.             long ipBegin = (long)ip3 * (long)0x1000000 + (long)(ip2 * 0x10000) + (long)(ip1 * 256) + (long)ip0;
  192.             ip3 = Integer.parseInt(IP_TABLE[i][1].substring(0, 3));
  193.             ip2 = Integer.parseInt(IP_TABLE[i][1].substring(4, 7));
  194.             ip1 = Integer.parseInt(IP_TABLE[i][1].substring(8, 11));
  195.             ip0 = Integer.parseInt(IP_TABLE[i][1].substring(12, 15));
  196.             long ipEnd = (long)ip3 * (long)0x1000000 + (long)(ip2 * 0x10000) + (long)(ip1 * 256) + (long)ip0;
  197.             if(ipVisitor >= ipBegin && ipVisitor <= ipEnd)
  198.                 pos = i;
  199.         }
  200.         return pos;
  201.     }
  202.     public static String IP_TABLE[][];
  203.     static 
  204.     {
  205.         IP_TABLE = new String[3000 + IPTable3.IP_TABLE.length][2];
  206.         for(int i = 0; i < IPTable0.IP_TABLE.length; i++)
  207.         {
  208.             IP_TABLE[i][0] = IPTable0.IP_TABLE[i][0];
  209.             IP_TABLE[i][1] = IPTable0.IP_TABLE[i][1];
  210.             IP_TABLE[1000 + i][0] = IPTable1.IP_TABLE[i][0];
  211.             IP_TABLE[1000 + i][1] = IPTable1.IP_TABLE[i][1];
  212.             IP_TABLE[2000 + i][0] = IPTable2.IP_TABLE[i][0];
  213.             IP_TABLE[2000 + i][1] = IPTable2.IP_TABLE[i][1];
  214.         }
  215.         for(int i = 0; i < IPTable3.IP_TABLE.length; i++)
  216.         {
  217.             IP_TABLE[3000 + i][0] = IPTable3.IP_TABLE[i][0];
  218.             IP_TABLE[3000 + i][1] = IPTable3.IP_TABLE[i][1];
  219.         }
  220.     }
  221. }