`

IP地址段的过滤

阅读更多

        昨天接到领导指示,要对地市的IP地址进行过滤,晕了,过滤啥呀,不过想归想,那还得做不是,呵呵
开始想在服务器<Tomcat>上整一下呢,仔细一看不行,附Tomcat过滤IP方法:
限制ip,限制主机访问:
如果想禁止指定的ip或者主机名来拒绝某些机器访问,或者指定某些机器来访问。
也支持分别按Engine, Host, or Context,进行以下配置:
<Context path="/examples" ...> ...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
</Context>
参考:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/context.html
没辙,继续...
因为要过滤的IP有七十二组<(58.87.96.0    58.57.121.255),(219.147.0.0    219.147.0.211)>想到用正则表达式,因为本人对正则表达式这东西,实在不精,呵呵,也就没敢用,呵呵
最终在于朋友交流后,采取如下形式解决的:

一、新建一xml配置文件,将要过滤的IP段写入;
二、新建一Filter,完成过滤要求
代码如下所示:
IP.XML
<?xml version="1.0" encoding="UTF-8"?>
<root id="allow">
   <group>   
    <start>122.6.192.0</start>
    <end>122.6.255.255</end>
   </group>
   <group>   
    <start>219.146.208.0</start>
    <end>219.146.215.255</end>
   </group>
   <group>   
    <start>222.174.224.0</start>
    <end>222.174.255.255</end>
   </group>
</root>
Filter如下所示:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.parsers.*;


public class FilterServlet    extends HttpServlet    implements Filter {
 

  private Document doc=null;
  private FilterConfig filterConfig;
  //Handle the passed-in FilterConfig
  private String encoding = "GBK";
 
  public void init(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
  }

  //Process the request/response pair
  public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain filterChain) {
  
   HttpServletResponse httpResp = null;
   HttpServletRequest httpReq = null;

    try {

      String reqip = request.getRemoteHost();
      if(null != reqip){       
          reqip = reqip.replace('.','_');
      }
      String[] temp = reqip.split("_");
      int[] ip = new int[temp.length];
     
      for(int i=0;i<temp.length;i++){       
          ip[i] = new Integer(temp[i]).intValue();
      }
      if (response instanceof HttpServletResponse) {
      
       httpReq = (HttpServletRequest)request;
       httpResp = (HttpServletResponse)response;
      if(!viewXml(httpReq.getRealPath("/")+"/WEB-INF/ip.xml",ip)){
       
       httpResp.sendRedirect(" http://welcome.sd.vnet.cn/ ");
      }
      filterChain.doFilter(request, response);
    }
    }
    catch (ServletException sx) {
     filterConfig.getServletContext().log(sx.getMessage());
    }
    catch (IOException iox) {
      filterConfig.getServletContext().log(iox.getMessage());
    }catch(Exception e){
     
     filterConfig.getServletContext().log(e.getMessage());
    }
  }
 
  /**
   * 验证请求IP是否符合要求
   * @param xmlFile
   * @return
   * @throws Exception
   */
  public boolean viewXml(String xmlFile,int[] ip) throws Exception {
  
   int[] test = ip;
   boolean flag = true;
   DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
   DocumentBuilder db=dbf.newDocumentBuilder(); 
   doc=db.parse(new File(xmlFile));
   Element root = doc.getDocumentElement();
      NodeList list = root.getElementsByTagName("group");

      for (int i=0; i < list.getLength() ; i++) {
        Element element = (Element)list.item(i);
        NodeList titleid = element.getElementsByTagName("start");
        Element idElement = (Element)titleid.item(0);
        String ip1 = idElement.getFirstChild().getNodeValue();      
        ip1 = ip1.replace('.','_');
        String[] ip1s = ip1.trim().split("_");
        Integer[] ipl1 = new Integer[ip1s.length];
        for(int a=0;a<ip1s.length;a++){
                  ipl1[a] = new Integer(ip1s[a]);
        }
        
        NodeList titleList = element.getElementsByTagName("end");
        Element titleElement = (Element)titleList.item(0);
        String ip2 = titleElement.getFirstChild().getNodeValue();
        ip2 = ip2.replace('.','_');
        String[] ip2s = ip2.trim().split("_");
        Integer[] ipl2 = new Integer[ip2s.length];
        for(int b=0;b<ip2s.length;b++){         
            ipl2[b] = new Integer(ip2s[b]);
        }
        
        long test_value = test[0]*255*255*255+test[1]*255*255+test[2]*255+test[3];
        long ip1_value = ipl1[0]*255*255*255+ipl1[1]*255*255+ipl1[2]*255+ipl1[3];
        long ip2_value = ipl2[0]*255*255*255+ipl2[1]*255*255+ipl2[2]*255+ipl2[3];
       
        if(test_value >= ip1_value && test_value <= ip2_value){        
            return true;
        }
       
      }      
      return false;
  }

  public void destroy() {
    filterConfig = null;
    encoding = null;
  }
}
WEB.XML如下:
<filter>
  <filter-name>filterservlet</filter-name>
  <filter-class>com.lvke.web.qcbst.util.common.FilterServlet</filter-class>
 </filter>
<filter-mapping>
   <filter-name>filterservlet</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

希望能给用到的朋友减少一下负担,呵呵

分享到:
评论

相关推荐

    IP地址段的过滤,限制ip,限制主机访问

    "IP地址段的过滤,限制IP,限制主机访问"这个主题涉及到如何通过编程手段实现对网络访问的精细化管理,尤其是在Java Web环境中。以下是一些相关的知识点: 1. **IP地址与主机名**:IP地址是互联网上设备的唯一标识...

    IP地址过滤限制系统

    【IP地址过滤限制系统】是一种网络管理技术,用于控制网络访问权限,确保网络安全并防止恶意活动。该系统通过识别和管理接入网络的设备IP地址,实现对特定用户或设备的访问权限设定。以下是对该系统及其相关文件的...

    IP地址段分类,基本包括最新世界所有IP地址段对应的地区

    例如,通过查询这个数据库,可以快速识别某个IP地址属于哪个国家或地区,有助于实现流量分析、安全过滤等功能。 标签中的“IP对应地区”是指IP地址与地理位置的关系。每个IP地址都由互联网分配机构(如IANA)分配给...

    IP地址过滤

    IP地址过滤是一种网络安全技术,用于控制网络流量和保护系统免受恶意IP的侵害。在这个场景中,"IP地址过滤"指的是利用QQ wry纯真数据库来实现这一功能的工具。 QQ wry纯真数据库是一个广泛使用的中国地区IP地址库,...

    国外IP地址过滤防火墙

    防止国外IP访问及攻击国内服务器功能,包含最近国外IP地址段的列表,根据配置来进行IP拦截,具体配置如下: 1、上传安装包 安装包为ZIP压缩包:ipfirewall.zip,利用SSH工具上传到服务器上,执行如下指令解压: ...

    java过滤IP地址代码

    String remoteHost=request.getRemoteHost(); log.info("Request from host:"+remoteHost); //判断客户计算机IP地址是否合法,以127开头的表示不合法,禁止访问

    IP数据包过滤,过滤端口、黑名单、网段等

    * sourceIp、sourceMask参数:源IP地址和掩码 * sourcePort参数:源端口号。等于0表示不指定端口。 * destinationIp、destinationMask参数:目的地址、目的掩码。 * destinationPort参数:目的端口。等于0...

    IP地址库(Excel版)

    1. IP地址范围:每个IP地址段都有一个起始IP和结束IP,用于定义一个连续的IP地址集合。 2. 地理位置:包括国家、地区、城市等不同级别的地理位置信息,便于定位IP地址所在的位置。 3. AS编号(自治系统号):对应于...

    MYSQL最新IP地址库(全国+全球)

    10. **应用场景**:IP地址库广泛应用于网站访问统计、内容过滤、广告定向、网络安全、路由规划、服务器负载均衡等多个领域。 综上所述,MySQL最新IP地址库是一个强大的工具,它能够帮助企业和开发者更好地理解和...

    行业分类-设备装置-基于IP地址绑定过滤多媒体业务量的方法和系统.zip

    标题中的“行业分类-设备装置-基于IP地址绑定过滤多媒体业务量的方法和系统”表明了这个压缩包内容涉及的是信息技术领域,特别是与网络设备和多媒体业务处理相关的技术。描述中的内容与标题一致,进一步强调了这是一...

    辽宁ip段 大全

    1. **网络安全管理**:通过识别这些特定的IP地址段,可以更有效地管理和过滤来自辽宁省的网络流量,提高网络安全水平。 2. **地理定位服务**:对于提供基于位置的服务的应用程序来说,这些IP地址段可以帮助识别用户...

    IP地址的正则表达式

    在网络设备配置中,可以利用正则表达式来过滤和管理大量的IP地址信息。 总之,“IP地址的正则表达式”不仅展示了正则表达式的强大功能,也揭示了在处理网络通信和数据验证中正则表达式的实用价值。理解和掌握这一...

    python windows系统日志文件evtx解析,过滤指定事件,根据IP地址解析出实际物理地址

    本教程将探讨如何使用Python来解析EVTX日志,过滤特定事件,并根据IP地址解析出实际的物理地址。 首先,我们需要了解Python中的`xml.etree.ElementTree`库,这是Python标准库的一部分,用于处理XML数据。EVTX文件...

    IP地址库完整版.zip

    IP地址库的Excel版本可能包含工作表,列出了IP地址及相关属性,便于用户进行过滤、排序和分析。 6. **MySQL原始数据文件**:.frm、.myd和.myi是MySQL数据库的存储引擎文件。.frm文件存储表结构信息,.myd存储数据,...

    ip地址管理器用java语言实现

    IP地址是由32位二进制组成的,通常被分为四段,每段8位,以十进制形式表示,中间用点号分隔,如192.168.0.1。在实际应用中,我们主要处理IPv4地址,但随着网络设备的增加,IPv6也逐渐被采纳。 在Java中,`java.net`...

    甘肃ip段甘肃ip段

    从给定的信息中,我们可以看出这是一份关于甘肃省IP地址段的列表,这些IP段用于标识互联网上位于甘肃省内的服务器、设备或网络节点。在IT领域,了解特定地区的IP地址范围对于网络安全、地理定位服务、数据隐私保护...

    filter过滤器流程及中文乱码解决和客户端IP地址控制

    这样,任何尝试从被拒绝的IP地址访问应用的请求都将被重定向到`rejectedIPError.jsp`页面。 总的来说,Filter在Java Web开发中扮演着至关重要的角色,它可以用来处理各种任务,包括但不限于防止中文乱码、控制...

    国内外活跃IP段IP库

    "国内外活跃IP段IP库"是一个集合了全球范围内活动中的IP地址范围的数据资源。这个数据集通常包含了国内(中国)和国外(其他国家和地区)的IP地址段,为网络分析、网络安全、流量监测等应用提供重要的基础信息。 IP...

Global site tag (gtag.js) - Google Analytics