`
shuai1234
  • 浏览: 933864 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

判断每个ip是否在以个指定的IP段内

    博客分类:
  • java
 
阅读更多
Java代码  
package com.tiansong.infosafetranflag.safe.www;      
     
import java.io.IOException;      
import java.util.Iterator;      
import java.util.List;      
     
import javax.servlet.Filter;      
import javax.servlet.FilterChain;      
import javax.servlet.FilterConfig;      
import javax.servlet.ServletException;      
import javax.servlet.ServletRequest;      
import javax.servlet.ServletResponse;      
import javax.servlet.http.HttpServletRequest;      
import javax.servlet.http.HttpServletResponse;      
     
import com.tiansong.infosafetranflag.safe.system.entity.IPItem;      
import com.tiansong.infosafetranflag.safe.system.service.IPItemService;      
import com.tiansong.infosafetranflag.safe.system.service.ServiceFactory;      
import com.tiansong.infosafetranflag.safe.system.service.dao.DAOServiceFactory;      
     
public class RemoteHostFilter implements Filter {      
     
    public RemoteHostFilter() {      
    }      
     
    public void doFilter(ServletRequest request, ServletResponse response,      
            FilterChain chain) throws IOException, ServletException {      
        HttpServletRequest req = (HttpServletRequest) request;      
        HttpServletResponse resp = (HttpServletResponse) response;      
        // 取得本机的IP地址      
        //InetAddress localAddress = InetAddress.getLocalHost();      
     
        //String ipAddress = localAddress.getHostAddress();      
              
        String ipAddress = req.getRemoteHost();      
System.out.println(ipAddress);      
        long ip = getIpNum(ipAddress);      
     
        ServiceFactory factory = new DAOServiceFactory();      
        try {      
            IPItemService ipService = factory.createIPItemService();      
     
            // 从数据库中取出所有的IP段      
            List ipList = ipService.getAllIPItem();      
            if (ipList.size() > 0 && ipList != null) {      
                for (Iterator it = ipList.iterator(); it.hasNext();) {      
                    IPItem item = (IPItem) it.next();      
                    String startIp = item.getStartIp();      
                    String endIp = item.getEndIp();      
                    long start_ip = getIpNum(startIp);      
                    long end_ip = getIpNum(endIp);      
     
                    if (isInner(ip, start_ip, end_ip)) {      
                        if (item.getStatus().equals("1")      
                                || item.getStatus().equals("true")) {      
                            //System.out.println("你的IP已被屏蔽,请跟管理员联系!");      
                            //resp.sendError(404);      
                            resp.sendRedirect(req.getContextPath()      
                                    + "/NoSecurity.html");      
                            return;      
                        }      
                    }      
                }      
            }      
     
        } catch (Exception e) {      
        }      
        chain.doFilter(request, response);      
    }      
     
    public void destroy() {      
     
    }      
     
    public void init(FilterConfig filterConfig) {      
     
    }      
     
    /**    
     * 分割IP    
     *     
     * @param ipAddress    
     * @return    
     */     
    private static long getIpNum(String ipAddress) {      
        String[] ip = ipAddress.split("\\.");      
        long a = Integer.parseInt(ip[0]);      
        long b = Integer.parseInt(ip[1]);      
        long c = Integer.parseInt(ip[2]);      
        long d = Integer.parseInt(ip[3]);      
     
        long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;      
        return ipNum;      
    }      
     
    /**    
     * 判断客户端的IP是否在某个ip段中    
     *     
     * @param clientIp    
     *            客户端的IP    
     * @param begin    
     *            开始IP    
     * @param end    
     *            结束IP    
     * @return    
     */     
    private static boolean isInner(long clientIp, long begin, long end) {      
        return (clientIp >= begin) && (clientIp <= end);      
    }      
     
}    

package com.tiansong.infosafetranflag.safe.www;   
  
import java.io.IOException;   
import java.util.Iterator;   
import java.util.List;   
  
import javax.servlet.Filter;   
import javax.servlet.FilterChain;   
import javax.servlet.FilterConfig;   
import javax.servlet.ServletException;   
import javax.servlet.ServletRequest;   
import javax.servlet.ServletResponse;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import com.tiansong.infosafetranflag.safe.system.entity.IPItem;   
import com.tiansong.infosafetranflag.safe.system.service.IPItemService;   
import com.tiansong.infosafetranflag.safe.system.service.ServiceFactory;   
import com.tiansong.infosafetranflag.safe.system.service.dao.DAOServiceFactory;   
  
public class RemoteHostFilter implements Filter {   
  
    public RemoteHostFilter() {   
    }   
  
    public void doFilter(ServletRequest request, ServletResponse response,   
            FilterChain chain) throws IOException, ServletException {   
        HttpServletRequest req = (HttpServletRequest) request;   
        HttpServletResponse resp = (HttpServletResponse) response;   
        // 取得本机的IP地址   
        //InetAddress localAddress = InetAddress.getLocalHost();   
  
        //String ipAddress = localAddress.getHostAddress();   
           
        String ipAddress = req.getRemoteHost();   
System.out.println(ipAddress);   
        long ip = getIpNum(ipAddress);   
  
        ServiceFactory factory = new DAOServiceFactory();   
        try {   
            IPItemService ipService = factory.createIPItemService();   
  
            // 从数据库中取出所有的IP段   
            List ipList = ipService.getAllIPItem();   
            if (ipList.size() > 0 && ipList != null) {   
                for (Iterator it = ipList.iterator(); it.hasNext();) {   
                    IPItem item = (IPItem) it.next();   
                    String startIp = item.getStartIp();   
                    String endIp = item.getEndIp();   
                    long start_ip = getIpNum(startIp);   
                    long end_ip = getIpNum(endIp);   
  
                    if (isInner(ip, start_ip, end_ip)) {   
                        if (item.getStatus().equals("1")   
                                || item.getStatus().equals("true")) {   
                            //System.out.println("你的IP已被屏蔽,请跟管理员联系!");   
                            //resp.sendError(404);   
                            resp.sendRedirect(req.getContextPath()   
                                    + "/NoSecurity.html");   
                            return;   
                        }   
                    }   
                }   
            }   
  
        } catch (Exception e) {   
        }   
        chain.doFilter(request, response);   
    }   
  
    public void destroy() {   
  
    }   
  
    public void init(FilterConfig filterConfig) {   
  
    }   
  
    /**  
     * 分割IP  
     *   
     * @param ipAddress  
     * @return  
     */  
    private static long getIpNum(String ipAddress) {   
        String[] ip = ipAddress.split("\\.");   
        long a = Integer.parseInt(ip[0]);   
        long b = Integer.parseInt(ip[1]);   
        long c = Integer.parseInt(ip[2]);   
        long d = Integer.parseInt(ip[3]);   
  
        long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;   
        return ipNum;   
    }   
  
    /**  
     * 判断客户端的IP是否在某个ip段中  
     *   
     * @param clientIp  
     *            客户端的IP  
     * @param begin  
     *            开始IP  
     * @param end  
     *            结束IP  
     * @return  
     */  
    private static boolean isInner(long clientIp, long begin, long end) {   
        return (clientIp >= begin) && (clientIp <= end);   
    }   
  
}  


js判断是否是ip字符串 
Js代码  
function iptest(v){      
        var ip = /^([1-9][0-9]{0,1}|1[013-9][0-9]|12[0-689]|2[01][0-9]|22[0-3])([.]([1-9]{0,1}[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){2}[.]([1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-4])$/;      
        return ip.test(v);      
    }   

 

分享到:
评论

相关推荐

    ASP中实现限制IP的函数详解

    号循环,然后判断是否含有”-“,如果有则进行拆分处理,最后判断是否在范围内 ‘参数: cInput_Ip,代检查的ip ‘cBound_Ip,给定的范围格式为,单个ip,和范围ip,范围ip最后使用”-“分割,如果是“*”则必须放到...

    《网络基础》网络基础之网络诊断实验报告.docx

    经过一段时间,pathping 命令将数据包发送到最终目标位置途中经过的每个路由器。pathping 命令与工具tracert类似,请比较tracert的结果。 6. nslookup Nslookup显示可用来诊断域名系统 (DNS) 基础结构的信息。只有...

    如何编写批处理文件批处理文件批处理文件

    用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,...

    win版apache防ddos mod_dosevasive22

    假如这个选项被设置,每个ip被列入黑名单时,都将发送email通知。但有机制防止重复发送相同的通知 注意:请确定mod_dosevasive.c (or mod_dosevasive20.c)已正确配置。 默认配置是 "/bin/mail -t %s" %s 是email...

    TCP拦截和网络地址转换

    因为有足够的资源来管理每个 T C P连接。 至此已介绍完了T C P拦截。下一节将讨论网络地址转换( N AT)。 8.4 网络地址转换概述 网络地址转换可以动态改变通过路由器的 I P报文的内容,以便修改报文的源 I P...

    基于PCAP的网络入侵检测系统C语言实现源码+详细项目说明+作业报告(课程大作业).zip

    对于IP地址, 可以采用链表的方式存储, 但由于需要判断IP地址是否唯一, 故需遍历整个链表, 时间复杂度为`O(n)`, 同时我们只需要知道IP地址是否已经存在, 并不需要记录完整的IP地址, 因此内存上的开销也不占据优势....

    x-scan 3.3完整中文版

    采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能。扫描内容包括:远程服务类型、操作系统类型及版本,各种弱口令漏洞、后门、应用服务漏洞、网络设备漏洞、拒绝服务漏洞等二十几个大类。 ...

    大量批处理实用程序例程

    全盘删除每个文件夹下的指定文件.cmd 全盘搜索指定文件.cmd 全盘查找QQ.exe并执行.cmd 创建url格式的快捷方式.cmd 删除N天之前的文件.cmd 删除当前目录下及其子文件夹中所有的空文件夹.cmd 删除所有以数字命名的...

    labview显示运行在本地或远程计算机上的所有进程

    如果没有指定模块名,显示每个进程加载的所有模块。 /SVC 显示每个进程中的服务信息,当/fo参数设置为table时有效。 /V 显示详细信息。 /FI filter 显示一系列符合筛选器指定的进程。 /FO format 指定输出格式,...

    jsp九大内置对象

     使用Request对象的getCookie()方法,执行时将所有客户端传来的Cookie对象以数组的形式排列,如果要取出符合需要的Cookie对象,就需要循环比较数组内每个对象的关键字。  例如:  Cookie[] c = request.get...

    入门学习Linux常用必会60个命令实例详解doc/txt

    每个虚拟控制台可以看作是一个独立的工作站,工作台之间可以切换。虚拟控制台的切换可以通过按下Alt键和一个功能键来实现,通常使用F1-F6 。 例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的...

    mysql数据库my.cnf配置文件

    # MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,...

    爱莎网络监视器(用于监视局域网动态)

    4-扫描获取指定IP段内的存活主机及相关信息:IP地址、MAC地址、工作组和主机名。 5-可以在两种扫描方式中进行选择:一般扫描(基于Netbios),高级扫描(基于Arp)。 6-监视所有主机的打开网页记录:包括每个网页的请求...

    Dos命令大全

    用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,...

    基于Linux 的防火墙技术研究

    Filter、Nat、Mangle 而得名,每个表有几条链。一条链就是发生在包L 的一系列动作,例如Filter 表就有INPUT、FORWARD、OUTPUT 三个不同的默认链。如果包过滤需要检查IP 包,则netfilter 框架在网络层截获IP 包,这就...

    啊d网络工具包

    Ping:判断某IP是否和网络连接的好帮手! 2. 共享资源查找:为你查找网上的共享资源! 3. 常用修改:反恶意网页修改,恢复系统设置等 4. Finger:Finger能为你查询对方系统的用户信息! 5. 端口扫描:使你更加了解对方...

    网络 工具包

    Ping:判断某IP是否和网络连接的好帮手! 2. 共享资源查找:为你查找网上的共享资源! 3. 常用修改:反恶意网页修改,恢复系统设置等 4. Finger:Finger能为你查询对方系统的用户信息! 5. 端口扫描:使你更加了解对方...

    分析网页中数据自动并保存到数据库(源码+手册)

    网页下载设置信息:  网页名称:用户给网页命名的名称。... 测试数据库:判断填写的数据库设置信息是否正确。  与服务DB相同:表示与系统数据库设置相同  步骤1:测试DB表示是否能正确连接数据库。

    网络组建与管理4/网络管理

    第8课 基本网络管理工具及应用 Windows 2000 Server 的网络监视器 Windows 2000 Server ...-s 显示每个协议的使用状态(包括TCP协议、UDP协议、IP协议); -n 以数字表格形式显示地址和端口; -a 显示所有主机的端口号。

Global site tag (gtag.js) - Google Analytics