`

java --IP地址段的过滤

    博客分类:
  • java
阅读更多

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>

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

分享到:
评论

相关推荐

    java过滤IP地址代码

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

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

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

    word源码java-china-ip-filter:中国大陆IP过滤器-Java

    中国大陆IP过滤器-Java IP文件路径: 项目的resources/china_ip目录下 使用ChinaIPRecognizer类即可 更新记录 201911月30日更新 原文链接: 概述 本篇讲解如何快速判断IPV4地址是否在大陆境内的IP地址。 中国IPV4的...

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

    本项目名为“IP地址管理器”,采用Java语言进行实现,主要关注于IP地址的过滤、开通和关闭功能。这涉及到网络编程、数据结构、多线程以及可能的数据库操作等多个知识点。 首先,我们需要理解IP地址的基本概念。IP...

    Java实现IPV6地址查询

    2. **创建IPv6Bean对象**:为每个查询的IPv6地址创建一个`IPv6Bean`实例,存储IP地址本身以及后续查询得到的地理位置信息。 3. **执行查询**:在`IpV6Seeker`类中,实现一个方法,接受IPv6地址作为参数,使用ZX库的...

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

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

    jsp程序 用户IP地址所在地记录

    首先,`IPEntry.java`可能是用于存储IP地址信息的数据模型类,可能包含了如IP地址(IP)、地理位置(location)等属性,并提供了相应的getter和setter方法。这样的类有助于将IP信息结构化,方便后续处理。 其次,`...

    ip2location-lite-db1.csv.zip ip国家对应 数据库 ipv4版本

    每一行可能代表一个IP地址段,列可能包括起始IP、结束IP和对应的国家代码等信息。 2. **LICENSE-CC-BY-SA-4.0.TXT**:这是关于授权的文件,表明IP2Location数据库遵循Creative Commons Attribution-ShareAlike 4.0 ...

    ip地址所属地域解析

    接着,"IMGFilter.java"可能是一个图像过滤或处理类,虽然它不是直接与IP地址解析相关的,但可能是为了在显示地理位置信息时,配合地图图片进行处理。例如,它可能包含了一些图像处理算法,如缩放、裁剪或者添加标注...

    JAVA-JSP流量统计系统

    5. **地理定位**:通过IP地址识别访问者的地理位置,分析全球用户分布。 ### 四、系统实现技术 1. **Servlet技术**:虽然JSP主要负责视图层,但后台处理逻辑通常由Servlet完成。Servlet处理请求,更新数据库,并将...

    登录ip BS java

    此外,考虑到安全问题,应当注意过滤潜在的伪造IP地址。 总结起来,"登录IP BS Java"涉及的关键知识点包括: 1. BS架构的理解 2. Java Web开发中的Servlet和HttpServletRequest对象 3. 获取客户端IP的HTTP头字段,...

    JAVA100例之实例42 获取计算机名称和IP地址

    通过遍历并检查每个地址是否是回环地址(即127.0.0.1或::1),我们可以过滤出实际的网络接口IP地址。 值得注意的是,上述代码可能因网络环境的不同而产生不同的结果。例如,某些网络环境可能不支持IPv6,或者某些...

    获取本手机的ip地址代码

    ### 获取本手机的IP地址代码知识点详解 #### 一、知识点概述 在移动应用开发过程中,有时我们需要获取设备(如手机)的IP地址,以便进行网络通信或调试等操作。本文将详细介绍如何通过Java代码来实现这一功能,并...

    java实现ip数据包的分析

    2. **设置过滤器**:你可以设置一个 BPF(Berkeley Packet Filter)表达式,只捕获满足特定条件的数据包,如只关注特定 IP 地址或协议。 3. **捕获数据包**:开始监听网络接口,当有数据包到达时,会触发回调函数,...

    Springboot过滤器禁止ip频繁访问功能实现

    在这个方法中,我们可以获得HttpServletRequest和HttpServletResponse对象,从而可以获取用户的ip地址、请求的url等信息。 在我们的示例代码中,我们使用了ConcurrentHashMap来存储被限制的ip信息。在doFilter方法...

    最新IP地址库(20080615)

    4. **内容过滤**:企业或学校可能会根据IP地址库来限制某些地区的访问,或者实施特定的网络策略。 5. **应用开发**:移动应用开发者可以利用IP地址库实现基于位置的服务,比如显示附近的商家或提供定制化内容。 ...

    显示本地IP地址代码

    这段代码通过创建一个UDP套接字并尝试连接到公共DNS服务器,然后获取自身绑定的IP地址。 2. **Java实现**: 在Java中,我们可以使用`java.net.NetworkInterface`和`java.net.InetAddress`类来获取本地IP。 ```...

    关于ip的过滤器 spring security例子

    本文将深入探讨如何在Spring Security中实现IP过滤器,以便控制访问应用的客户端IP地址。 首先,我们需要理解Spring Security的基本架构。它是一个多层次的组件模型,其中包括认证、授权和会话管理等核心功能。在...

    用Java实现对IP/TCP协议数据包的拦截和分析

    本文将深入探讨如何利用Java编程语言实现对IP和TCP协议数据包的拦截与分析,以便获取IP地址的详细信息。 首先,我们需要理解IP(Internet Protocol)和TCP(Transmission Control Protocol)的基本概念。IP协议负责...

    android手机获取上网的ip地址

    `InetAddress`是Java的网络编程基础类,提供了获取IP地址的方法。在Android中,可以使用`InetAddress.getLocalHost()`获取本地主机的IP地址,但通常这只会返回localhost(127.0.0.1),并不适合我们获取上网的IP...

Global site tag (gtag.js) - Google Analytics