精华内容
下载资源
问答
  • 用Filter实现IP过滤

    2021-03-13 18:45:48
    } }//while //Piece together half of the client IP address so it can be compared // with //the forbidden range represented by IPFilter.IP_RANGE client = byte1 + "." + byte2; if (IP_RANGE.equals(client...

    import java.io.IOException;

    import java.util.StringTokenizer;

    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.HttpServletResponse;

    public class IPFilter implements Filter {

    private FilterConfig config;

    public final static String IP_RANGE = "192.168";

    public IPFilter() {

    }

    public void init(FilterConfig filterConfig) throws ServletException {

    this.config = filterConfig;

    }

    public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chain) throws IOException, ServletException {

    String ip = request.getRemoteAddr();

    HttpServletResponse httpResp = null;

    if (response instanceof HttpServletResponse)

    httpResp = (HttpServletResponse) response;

    StringTokenizer toke = new StringTokenizer(ip, ".");

    int dots = 0;

    String byte1 = "";

    String byte2 = "";

    String client = "";

    while (toke.hasMoreTokens()) {

    ++dots;

    //if we've reached the second dot, break and check out the indx

    // value

    if (dots == 1) {

    byte1 = toke.nextToken();

    } else {

    byte2 = toke.nextToken();

    break;

    }

    }//while

    //Piece together half of the client IP address so it can be compared

    // with

    //the forbidden range represented by IPFilter.IP_RANGE

    client = byte1 + "." + byte2;

    if (IP_RANGE.equals(client)) {

    httpResp.sendError(HttpServletResponse.SC_FORBIDDEN,

    "That means goodbye forever!");

    } else {

    chain.doFilter(request, response);

    }

    }// doFilter

    public void destroy() {

    /*

    * called before the Filter instance is removed from service by the web

    * container

    */

    }

    }

    阅读(1446) | 评论(0) | 转发(0) |

    展开全文
  • 在工作中遇到一个与第三方服务商进行API对接的项目,需要进行IP白名单处理,于是我立马想到使用中间件做IP过滤,在此记录一下 添加中间件 新建一个SafeIpList类 public class SafeIpList { public string ip_...

    背景

    在工作中遇到一个与第三方服务商进行API对接的项目,需要进行IP白名单处理,于是我立马想到使用中间件做IP过滤,在此记录一下

    添加中间件

    1. 新建一个SafeIpList类
    public class SafeIpList
     {
          public string ip_list_name { get; set; }
    }
    
    1. 在配置文件中配置IP白名单
      "SafeIpList": {
       "ip_list_name ": "127.0.0.1"
     }
    
    1. 读取注入配置文件中的IP list
      services.Configure<SafeIpList>(Configuration.GetSection("SafeIpList"));
    
    1. 新建一个中间件写入以下代码
        public class SafeListMiddleware
        {
            private readonly RequestDelegate _next;
            private readonly ILogger<SafeListMiddleware> _logger;
            private SafeIpList _SafeIpList = null;
    
            public SafeListMiddleware(
                RequestDelegate next,
                ILogger<SafeListMiddleware> logger,
                IOptionsMonitor<SafeIpList> options)
            {
                _SafeIpList = options.CurrentValue;
                _next = next;
                _logger = logger;
            }
                  public async Task Invoke(HttpContext context)
            {
    
                var remoteIp = context.Connection.RemoteIpAddress;
                _logger.LogInformation($"Request from Remote IP address: {remoteIp}");
                string[] ip = _SafeIpList.InternalIPList.Split(';');
                var bytes = remoteIp.GetAddressBytes();
                var badIp = true;
                // 对特定API进行自定义处理
                //if (context.Request.Path.Value.Equals("/api/xx/xxx"))
                //{
                //    ip = _SafeIpList.XXIPList.Split(';');
                //}
                foreach (var address in ip)
                {
                    if (address.Equals("*"))
                    {
                        badIp = false;
                        break;
                    }
                    var testIp = IPAddress.Parse(address);
                    if (testIp.GetAddressBytes().SequenceEqual(bytes))
                    {
                        badIp = false;
                        break;
                    }
                }
                      if (badIp)
                {
                    _logger.LogInformation(
                        $"Forbidden Request from Remote IP address: {remoteIp}");
                    context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                    return;
                }
                await _next.Invoke(context);
    
            }
        }
    
    1. 启用中间件
    app.UseMiddleware<SafeListMiddleware>();
    

    通过以上简单五步就实现了IP过滤功能

    展开全文
  • Java IP过滤

    2021-02-26 09:26:16
    我的这个项目用了SpringMVC参考网上写了个IPFilter/** * IP过滤器* @author zytim* ip-pattern中配置允许访问的IP范围,允许"*"和"-"*/public class IPFilter implements Filter {private final static Logger ...

    我的这个项目用了SpringMVC

    参考网上写了个IPFilter

    /** * IP过滤器

    * @author zytim

    * ip-pattern中配置允许访问的IP范围,允许"*"和"-"

    */

    public class IPFilter implements Filter {

    private final static Logger logger = LoggerFactory.getLogger(IPFilter.class);

    private String ipPattern;

    public String getIpPattern() {

    return ipPattern;

    }

    public void setIpPattern(String ipPattern) {

    this.ipPattern = ipPattern;

    }

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    this.ipPattern =PropertyUtil.getProperty("ip-pattern");

    //从properties配置文件中取参数,也可以从web.xml的param-value里取参数,参数以“;”隔开

    //this.ipPattern = filterConfig.getInitParameter("ip-pattern");

    }

    @Override

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    String ip = request.getRemoteHost();

    String reqUrl = ((HttpServletRequest) request).getRequestURI();

    if (reqUrl.contains("nouser")) {

    chain.doFilter(request, response);//进入下一个Filter

    return;

    }

    if (validateIP(ip, ipPattern)) {

    //logger.info(ip+" is Permissible.");

    chain.doFilter(request, response);

    }

    else {

    logger.info(ip+" 拒绝访问。");//日志记录

    ((HttpServletResponse) response).sendRedirect("/nouser.jsp");

    }

    }

    @Override

    public void destroy() {

    // TODO Auto-generated method stub

    }

    /**

    * IP校验方法

    * 功能描述: ip地址权限校验,允许"192.168.1.*"和"192.169.1.0-254"格式

    * @param ipStr 请求ip

    * @param ipPattern 权限ip列表 以;隔开

    * @return 校验是否通过

    *

    */

    public static boolean validateIP(String ipStr, String ipPattern) {

    if ( ipStr == null || ipPattern == null) {

    return false;

    }

    String[] patternList = ipPattern.split( ";");

    // for(String str : patternList){

    // System.out.println("Permissible IP:"+str);

    // }

    //参数打印测试

    for (String pattern : patternList) {

    if ( passValidate(ipStr, pattern)) {

    return true;

    }

    }

    return false;

    }

    private static boolean passValidate(String ipStr, String pattern) {

    String[] ipStrArr = ipStr.split("\\.");

    String[] patternArr = pattern.split("\\.");

    if ( ipStrArr. length != 4 || patternArr. length != 4) {

    return false;

    }

    int end = ipStrArr. length;

    if ( patternArr[3].contains( "-")) {

    end = 3;

    String[] rangeArr = patternArr[3].split( "-");

    int from = Integer.valueOf(rangeArr[0]).intValue();

    int to = Integer.valueOf(rangeArr[1]).intValue();

    int value = Integer.valueOf(ipStrArr[3]).intValue();

    if ( value < from || value > to) {

    return false;

    }

    }

    for ( int i = 0; i < end; i++) {

    if ( patternArr[i].equals("*")) {

    continue;

    }

    if (!patternArr[i].equalsIgnoreCase(ipStrArr[i])) {

    return false;

    }

    }

    return true;

    }

    }

    配置web.xml,过滤所有.htm的请求:

    IPFilter

    com.xiaoniu.auth.filter.IPFilter

    ip-pattern

    IPFilter

    *.htm

    之前在配置时 url-pattern 中使用的是 /*,过滤了所有的请求,包括读取css样式文件等操作,导致错误提示页面变成原始挫页。这里只配置后只过滤了.htm请求,过滤了对核心业务的访问,保留了测试和页面调用的文件。

    展开全文
  • 处理 IP 过滤器的日志文件表21-5 使用 IP 过滤器的日志文件(任务列表)任务说明参考创建日志文件。创建单独的 IP 过滤器日志文件。查看日志文件。使用 ipmon 命令查看状态日志文件、NAT 日志文件和常规日志文件。清除...

    处理 IP 过滤器的日志文件

    表 21-5 使用 IP 过滤器的日志文件(任务列表)

    任务

    说明

    参考

    创建日志文件。

    创建单独的 IP 过滤器日志文件。

    查看日志文件。

    使用 ipmon 命令查看状态日志文件、NAT 日志文件和常规日志文件。

    清除包日志缓冲区。

    使用 ipmon -F 命令删除包日志缓冲区的内容。

    将记录的包保存到文件中。

    将记录的包保存到文件中,以供日后参考。

    如何为 IP 过滤器设置日志文件

    缺省情况下,IP 过滤器的所有日志信息都记录在 syslogd 文件中。应设置一个日志文件来单独记录 IP 过滤器流量信息,以将其与可能记录在缺省日志文件中的其他数据相区分。请执行以下步骤。承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。要创建该角色并将其指定给用户,请参见《Oracle Solaris 管理:安全服务》中的"初次配置 RBAC(任务列表)"。

    通过添加以下两行来编辑 /etc/syslog.conf 文件:# Save IP Filter log output to its own file

    local0.debug /var/log/log-name

    注 -在第二行中,确保使用 Tab 键而不是 Spacebar 来分隔 local0.debug 与 /var/log/log-name。

    创建新日志文件。# touch /var/log/log-name

    重新启动系统日志服务。# svcadm restart system-log

    示例 21-20 创建 IP 过滤器日志

    以下示例说明如何创建 ipmon.log 以归档 IP 过滤器信息。

    在 /etc/syslog.conf 中:# Save IP Filter log output to its own file

    local0.debug /var/log/ipmon.log

    在命令行中:# touch /var/log/ipmon.log

    # svcadm restart system-log

    如何查看 IP 过滤器的日志文件

    开始之前

    应创建一个单独的日志文件来记录 IP 过滤器数据。请参阅如何为 IP 过滤器设置日志文件。承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。要创建该角色并将其指定给用户,请参见《Oracle Solaris 管理:安全服务》中的"初次配置 RBAC(任务列表)"。

    查看状态日志文件、NAT 日志文件或常规日志文件。要查看日志文件,请键入以下命令,并使用适当的选项:# ipmon -o [S|N|I] filenameS

    显示状态日志文件。

    N

    显示 NAT 日志文件。

    I

    显示常规 IP 日志文件。

    要查看所有状态日志文件、NAT 日志文件和常规日志文件,请使用所有选项:# ipmon -o SNI filename如果您已事先手动停止了 ipmon 守护进程,则还可以使用以下命令来显示状态日志文件、NAT 日志文件和 IP 过滤器日志文件:# ipmon -a filename

    注 -如果 ipmon 守护进程仍在运行,请勿使用 ipmon -a 语法。通常,该守护进程会在系统引导期间自动启动。发出 ipmon -a 命令还会打开 ipmon 的另一个副本。在此情况下,两个副本将读取相同的日志信息,只有一个副本会获得特定日志消息。

    有关查看日志文件的更多信息,请参见 ipmon(1M) 手册页。

    示例 21-21 查看 IP 过滤器的日志文件

    以下示例显示了来自 /var/ipmon.log 的输出。# ipmon -o SNI /var/ipmon.log

    02/09/2004 15:27:20.606626 bge0 @0:1 p 129.146.157.149 ->

    129.146.157.145 PR icmp len 20 84 icmp echo/0 IN

    或# pkill ipmon

    # ipmon -aD /var/ipmon.log

    02/09/2004 15:27:20.606626 bge0 @0:1 p 129.146.157.149 ->

    129.146.157.145 PR icmp len 20 84 icmp echo/0 IN

    如何清除包日志文件承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。要创建该角色并将其指定给用户,请参见《Oracle Solaris 管理:安全服务》中的"初次配置 RBAC(任务列表)"。

    清除包日志缓冲区。# ipmon -F

    示例 21-22 清除包日志文件

    以下示例显示删除日志文件时的输出。即使未在日志文件中存储任何内容,系统也将提供一个报告,如此示例所示。# ipmon -F

    0 bytes flushed from log buffer

    0 bytes flushed from log buffer

    0 bytes flushed from log buffer

    如何将记录的包保存到文件中承担拥有 IP 过滤器管理权限配置文件的角色,或者成为超级用户。

    可以将 IP 过滤器管理权限配置文件指定给您创建的角色。要创建该角色并将其指定给用户,请参见《Oracle Solaris 管理:安全服务》中的"初次配置 RBAC(任务列表)"。

    将记录的包保存到文件中。# cat /dev/ipl > filename

    继续将包记录到 filename 文件中,直到您通过键入 Ctrl-C 组合键使命令行提示符重新出现来中断该过程。

    示例 21-23 将记录的包保存到文件中

    以下示例显示将记录的包保存到文件中时所出现的结果。# cat /dev/ipl > /tmp/logfile

    ^C#

    # ipmon -f /tmp/logfile

    02/09/2004 15:30:28.708294 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 52 -S IN

    02/09/2004 15:30:28.708708 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 40 -A IN

    02/09/2004 15:30:28.792611 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 70 -AP IN

    02/09/2004 15:30:28.872000 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 40 -A IN

    02/09/2004 15:30:28.872142 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 43 -AP IN

    02/09/2004 15:30:28.872808 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 40 -A IN

    02/09/2004 15:30:28.872951 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 47 -AP IN

    02/09/2004 15:30:28.926792 bge0 @0:1 p 129.146.157.149,33923 ->

    129.146.157.145,23 PR tcp len 20 40 -A IN

    .

    .

    (output truncated)

    展开全文
  • 绿色部分是过滤条件,捕获特定ip的收发包
  • java实现IP地址过滤

    2021-03-08 10:55:36
    增加过滤器,过滤非固定主机访问import java.io.IOException;import java.util.StringTokenizer;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax....
  • 要想实现ip地址过滤的访问需求。最主要的两个核心是: 1.创建拦截器 import com.jeedan.rest.web.ApiSignInterceptor; import org.springframework.context.annotation.Configuration; import org.spring...
  • 说明:亲测有用,但觉得不是很严谨,通过过滤网卡的名称实现。 static { try { InetAddress candidateAddress = null; // 遍历所有的网络接口 for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces...
  • 一 iptables简介iptables,可以将规则组成一个列表,实现...而放入内核的地方必须要是特定的位置,必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网...
  • -line-numbers 3、删除自定义连中指定的规则 iptables -D ODAE_DRUID_INPUT 3 4、删除规则 ip6tables -D INPUT -p tcp --dport 26200:26299 -j DROP 删除ip地址10.244.160.59,端口26200:26299的tcp DROP规则 4、...
  • import lombok.extern.slf4j.Slf4j; import org.springframework.... } // 合法请求,放⾏,执⾏后续的过滤器 return chain.filter(exchange); } @Override public int getOrder() { return 0; //越小优先级越高 } }
  • #查看wireshark数据包中的信息 ##1.wireshark基于端口和IP过滤 网络上的帧 数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。
  • / {print $2}' |awk -F: '{print $2}' 192.168.150.53 方法8: [root@localhost ~]#ifconfig eth0 |awk 'NR==2 {print $2}' |awk -F: '{print $2}' 192.168.150.53 方法9: [root@localhost ~]#ip add |awk -F '[ /]...
  • 使用捕获过滤或显示过滤,wireshark可以仅捕获/显示经过指定ip的数据包,即某个ip收到或发出的所有数据包。wireshark捕获/显示过滤使用方法见:“wireshark过滤器” 显示过滤:wireshark过滤经过指定ip的数据包 显示...
  • 在开发 Web 项目的时候,经常需要过滤器来处理一些请求,包括字符集转换什么的,记录请求日志什么的等等。在之前的 Web 开发中,我们习惯把过滤器配置到 web.xml 中,但是在 SpringBoot 中,兵没有这个配置文件,该...
  • grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
  • // 头攻击检测 过滤主机名 String requestHost = request.getHeader("host"); if (requestHost != null && !checkBlankList(requestHost)) { response.setStatus(403); return; } filterChain.doFilter(request, ...
  • In Go/GoLang, what is the fastest way to check if an IP address is in a specific range?For example, given range 216.14.49.184 to 216.14.49.191, how would I check if a given input IP address is in that...
  • Linux日志分析常用命令汇总1、查看当天有多少个IP访问:awk ‘{print $1}’ log_file|sort|uniq|wc –l2、查看某一个页面被访问的次数:grep “/index.php” log_file | wc –l3、查看每一个IP访问了多少个页面:awk...
  • 网络环境异常复杂,有时候我们不得不禁止一些恶意用户访问,禁止的方式有很多种,其中一种就是通过 IP 来限制,本文提供的方法允许你通过 IP 区间、CIDR (Classless Inter-Domain Routing)及单个 IP 格式来检查或过滤 ...
  • 提示 我们的代理服务往往是流量计费的,如果一些本该国内网站走代理去访问,那么就浪费的流量比较多。博主经过自己测试,如下的一些网站本应该国内访问,但是代理访问了。 我们可以在chrome插件proxy switchyomega中...
  • 下面会举几个在grep命令中使用从一个文件中匹配到特定的ip地址。下面的将会匹配ipv4的地址。匹配ip地址:使用下面的来匹配ipv4的地址,先来匹配从0.0.0.0到999.999.999.999的模式。复制代码代码如下:“([0-9]{1,3}[\...
  • 1) MySQL 查询现在所有用户select host,user from user;...2)GRANT ALL PRIVILEGES ON *.* TO 'emspro'@'10.112.84.1' IDENTIFIED BY 'xxxx' WITH GRANT OPTION;GRANT ALL PRIVILEGES ON *.* TO 'emspro'@'10....
  • System.out.println("request.getRemoteAddr():" + request.getRemoteAddr());System.out.println("request....前一个是获得客户端的ip地址后一个是获得客户端的主机名1.IPFilter.java//注意:在加载第一个页...
  • 背景近期做了一个需求,是检测某个 IP 是否在若干 IP 段内,做固定地点 IP 筛查,满足特定业务需求。解决方案PLAN A 点分十进制范围区分简单来讲,就是将 IPv4 原有的四段,分别对比 IP 地址,查看每一段是否在 IP ...
  • 本节内容将继续围绕此代码展开,主要讲解spring cloud gateway自定义过滤器的功能。本节内容的代码也会提交到GitHub上,注意提交的内容。本节主要讲解全局过滤器和局部过滤器。注意下面的示例不能作为生产环境的代码...
  • IP过滤规则,可以有如下形式:1.完整的IP地址 如:192.168.0.12.某一段IP 如:192.168.0.* 。运维人员可以自定义IP黑白名单,由多个IP过滤规则组成,保存在数组中。通过编写代码,实现IP黑白名单功能。首先实现一个...
  • 前文提到了在 openwrt 系统中,IP过滤和mac 过滤的大概实现,这里再简单介绍下域名过滤的实现。 域名过滤 域名过滤主要是建立在dns服务器基础上。前期我也考虑过通过域名劫持的方式将访问转接到其他地址 直接劫持ip ...
  • 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP访问限制等等。接口定义类:org.springframework.cloud.gateway.filter.GlobalFilterpublic interface ...
  • (存在部分请求不需要拦截)白名单:用于存放不需要拦截的请求路径2.4.3 实现步骤一:修改网关yml文件,配置不需要拦截的路径(白名单)步骤二:创建配置类,用于存放yml中自定义配置信息步骤三:完善网关过滤器,修改第...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 265,130
精华内容 106,052
关键字:

ip过滤