天道酬勤,学无止境

如何检查 iptables 中每个规则的命中计数?(How can I check the hit count for each rule in iptables?)

问题

我想知道如何从我使用 iptables 创建的访问列表中找出访问了哪个规则以及访问了多少次。

我的防火墙在 iptbales 中有超过 1000 条输入和输出规则; 我想找出他们每个人被访问的次数。

例如,假设我有以下规则:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

我想知道每个规则 1、2、3、4、5 和 6 被击中了多少次。

回答1

如果您为verbose指定选项-viptables将列出数据包和字节计数器,例如iptables -vL 。 同样iptables-save将列出所有条目,包括每个链的提到的计数器,但不是每个表条目(在某些系统上iptables-save需要选项-c来包括计数器)。

回答2

我使用以下命令检查我的 iptables 规则:

iptables -nvL [INPUT|FORWARD|OUTPUT|myCHAINNAME] --line-numbers | less

-n 通过不进行主机名查找来加快进程

行号有助于删除规则:

iptables -D [INPUT|FORWARD|OUTPUT|myCHAINNAME] [Rule#]

HTH

回答3

您还可以使用 collectds iptables 模块来聚合计数器:

https://collectd.org/wiki/index.php/Iptables

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Iptables 之recent模块小结
    Iptables的recent模块用于限制一段时间内的连接数, 是谨防大量请求***的必杀绝技! 善加利用该模块可充分保证服务器安全。recent常用参数--name 设定列表名称,即设置跟踪数据库的文件名. 默认DEFAULT;--rsource 源地址,此为默认。 只进行数据库中信息的匹配,并不会对已存在的数据做任何变更操作;--rdest 目的地址;--seconds 指定时间内. 当事件发生时,只会匹配数据库中前"几秒"内的记录,--seconds必须与--rcheck或--update参数共用;--hitcount 命中次数. hits匹配重复发生次数,必须与--rcheck或--update参数共用;--set 将地址添加进列表,并更新信息,包含地址加入的时间戳。 即将符合条件的来源数据添加到数据库中,但如果来源端数据已经存在,则更新数据库中的记录信息;--rcheck 检查地址是否在列表,以第一个匹配开始计算时间;--update 和rcheck类似,以最后一个匹配计算时间。 如果来源端的数据已存在,则将其更新;若不存在,则不做任何处理;--remove 在列表里删除相应地址,后跟列表名称及地址。如果来源端数据已存在,则将其删除,若不存在,则不做任何处理;recent模块需要注意的地方a) 目录/proc/net/下的xt
  • linux系统中查看己设置iptables规则
    1、iptables -L查看filter表的iptables规则,包括所有的链。filter表包含INPUT、OUTPUT、FORWARD三个规则链。说明:-L是--list的简写,作用是列出规则。2、iptables -L [-t 表名]只查看某个表的中的规则。说明:表名一共有三个:filter,nat,mangle,如果没有指定表名,则默认查看filter表的规则列表(就相当于第一条命令)。举例:iptables -L -t filter3、iptables -L [-t 表名] [链名]这里多了个链名,就是规则链的名称。说明:iptables一共有INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING五个规则链。举例:iptables -L INPUT注意:链名必须大写。在Linux系统上,命令的大小写很敏感。4、iptables -n -L说明:以数字形式显示规则。如果没有-n,规则中可能会出现anywhere,有了-n,它会变成0.0.0.0/05、iptables -nv -L说明:你也可以使用“iptables -L -nv”来查看,这个列表看起来更详细,对技术人员更友好,呵呵。如果想删除iptables规则我们可以如下操作删除用-D参数删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j
  • iptables之filter表操作
    filter表是iptables的默认表,它可以作用于INPUT、FORWARD、OUTPUT三个链上。实现对输入数据包、转发数据包以及输出数据包的过滤。这也是常见的防火墙的操作。规则格式:iptables [-t table] COMMAND chain [rulenum] [-m matchname [per-match-options]] -j targetname [per-target-options] -t 表示使用哪个表,raw,mangle,nat,filterchain 表示用于哪个链PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTINGrulenum 表示chain的第几条规则match 匹配条件,用于唯一的标识数据流,比如指定源目地址,源目端口,协议以及扩展的匹配项target 表示处理动作,最基本的包括允许、拒绝、丢弃、nat等 iptables的规则,类似ACL,从上到下进行匹配,需要双向放行。根所iptables所要实现的功能不同,其所需要配置的表和链也不同。最常见的操作是在本机进行数据包的过滤,即默认表filter的操作。如果把它当成网络防火墙,则需要开启核心转发功能。开启核心转发:永久生效:vi /etc/sysctl.conf# Controls IP packet forwardingnet.ipv4.ip
  • iptables命令速查
    iptables 命令速查 在实际操作 iptables 的过程中,是以表作为操作入口的 iptables 指令基本格式(参考 man 文档) 指令语法概览 iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specification iptables [-t table] -D chain rulenum iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target iptables [-t table] -E old-chain-name new-chain-name rule-specification = [matches...] [target] match = -m
  • linux笔记防火墙之iptables入门
    一.iptables简介 防火墙,其实说白了讲,就是用于实现Linux下访问控制功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测,它的功能十分强大,使用非常灵活,毫不逊色于一些企业级防火墙。 二.Netfilter、table、chains、policy之间的关系。 Netfilter是table的容器,而table(表)是chains(链)的容器,policy(规则)属于chain(链)。为了方便读者理解,举个例子:如果把Netfilter比作一栋楼,那么他们的关系如下: 三.iptables的工作原理 匹配规则原理图 防火墙规则的执顺序默认是从前到后,遇到匹配规则(不管是deny或者accept)后就不再往下检查,如果遇到不到匹配的规则会继续向下检查直到遇到匹配规则为止,若检查完所有规则还没有匹配就会使用默认规则进行匹配。 iptable表和链的对应关系 防火墙默认使用的是Fileter表,负责过滤本机流入、流出的数据包INPUT:负责过滤所有目标地址是本机地址的数据包FORWARD:负责转发流经本机但不进入本机的数据包,起转发的作用OUTPUT:处理所有从本机发出去的数据包。PROWARD:在数据包到达防火墙时
  • loadrunner自学以及问题解答2
    视频汇总地址:https://edu.51cto.com/lecturer/4626073.html 46.LR启动controller报错“transaction monitor not available”1.多是OS系统问题,修复试试或升级 2.或修复LR试试 47.Loadrunnber 报错误:Error -- memory violation : Exception ACCESS_VIOLATION received.的一种情况Posted on 2011-01-05 12:12蝈蝈俊 阅读(433) 评论(0) 编辑收藏 最近写的一个Loadrunner脚本,最后一步是点击“退出”按钮退出登录状态,如下: web_text_link("[退出]", "Snapshot=t18.inf", DESCRIPTION, "Text=[退出]", ACTION, "UserAction=Click", LAST); return 0; 但是会报错误: Action1.c(94): Error: C interpreter run time error: Action1.c (94): Error -- memory violation : Exception ACCESS_VIOLATION received. Action1.c(94): Notify: CCI trace
  • iptables入门篇
    一、 iptables简介1.1 什么是iptables?iptables是Linux防火墙工作在用户空间的管理工具,是netfilter/iptables IP 信息包过滤系统是一部分,用来设置、维护和检查Linux内核的IP数据包过滤规则。1.2主要特点1)列出数据包过滤器规则集的内容2)添加/删除/修改数据包过滤器规则集中的规则3)列出/清零数据包过滤器规则集的每个规则计数器 二、 基本概念iptables 可以检测、修改、转发、重定向和丢弃 IP 数据包。其代码已经内置于内核中,并且按照不同的目的被组织成表(table)的集合。表由一组预先定义的链(chain)组成,链包含遍历顺序规则。每一条规则包含条件匹配和相应的动作(称为目标),如果条件匹配为真,该动作会被执行。下图简要描述了网络数据包通过iptables的过程(只包含filter和nat表):图中在上面的小写字母代表表,在下面的大写字母代表链。从任何网络端口进来的每一个 IP 数据包都要从上到下的穿过这张图。一种常见的困扰是认为 iptables 对从内部端口进入的数据包和从面向互联网端口进入的数据包采取不同的处理方式,相反,iptabales 对从任何端口进入的数据包都会采取相同的处理方式。可以定义规则使 iptables 采取不同的方式对待从不同端口进入的数据包。当然一些数据包是用于本地进程的
  • L1高速缓存命中的周期/成本与在x86上注册的周期/成本?(Cycles/cost for L1 Cache hit vs. Register on x86?)
    问题 我记得在我的体系结构类中假设L1高速缓存命中为1个周期(即与寄存器访问时间相同),但是在现代x86处理器上实际上是真的吗? L1缓存命中需要几个周期? 与注册访问相比如何? 回答1 这是一篇有关该主题的精彩文章: http://arstechnica.com/gadgets/reviews/2002/07/caching.ars/1 要回答您的问题-是的,缓存命中的成本与寄存器访问的成本大致相同。 当然,高速缓存未命中代价很高;) PS: 具体情况会有所不同,但是此链接有一些不错的参考数字: 访问各种缓存和主存储器的大概费用? Core i7 Xeon 5500 Series Data Source Latency (approximate) L1 CACHE hit, ~4 cycles L2 CACHE hit, ~10 cycles L3 CACHE hit, line unshared ~40 cycles L3 CACHE hit, shared line in another core ~65 cycles L3 CACHE hit, modified in another core ~75 cycles remote L3 CACHE ~100-300 cycles Local DRAM ~30 ns (~120 cycles) Remote DRAM ~100
  • 2021-04-06
    关于如何排查vpn服务器无法转发的问题 iptables的规则未命中vpn服务器内核未开启路由转发功能反向路由校验未通过 iptables规则 首先检查iptables规则是否写了转发。(比如将FORWARD链默认策略设置为DROP)之前的规则构建过程如下: 清空iptables iptables -F或对于nat表iptables -t nat -Fiptables -Xiptables -Z 对于默认的filter表,写上状态模块,对于已接收的数据包,接收其关联或已建立连接的响应包。(如果没有设置,那么只能接收数据包,是无法接收响应包的) iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 写入转发规则 iptables -A FORWARD -s source -d destination -i tun+ -j ACCEPT令源地址(vpn分配虚拟ip池)到目的地址(155测试机)可以转发。数据包输入网络接口是tun+意思是匹配所有的tun网卡。-s后跟源地址,-d后跟目的地址,-i是进入的网卡。 设置nat表(可选,不知道有没有用,还没弄明白) iptables -t nat -A POSTROUTING -s source -o eth0 -j MASQUERADE-o是从这里出去的
  • MySQL探秘(二):SQL语句执行过程详解
    只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化。  当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,很多查询优化工作实际上就是遵循一些原则能够按照预想的合理的方式运行。  如下图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么: 客户端发送一条查询给服务器。服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。MySQL根据优化器生成的执行计划,再调用存储引擎的API来执行查询。将结果返回给客户端。 查询缓存  MySQL查询缓存保存查询返回的完整结构。当查询命中该缓存时,MySQL会立刻返回结果,跳过了解析、优化和执行阶段。  查询缓存系统会跟踪查询中涉及的每个表,如果这些表发生了变化,那么和这个表相关的所有缓存数据都将失效。  MySQL将缓存存放在一个引用表中,通过一个哈希值引用,这个哈希值包括了以下因素,即查询本身、当前要查询的数据库、客户端协议的版本等一些其他可能影响返回结果的信息。  当判断缓存是否命中时,MySQL不会进行解析查询语句,而是直接使用SQL语句和客户端发送过来的其他原始信息。所以,任何字符上的不同,例如空格、注解等都会导致缓存的不命中。
  • iptables--表/命令/选项/匹配/目标
    iptables--表/命令/选项/匹配/目标 1.基本语法2.表3.命令4.选项5.匹配5.1 通用匹配5.2 隐含匹配5.2.1 TCP匹配5.2.2 UDP匹配5.2.3 ICMP匹配 5.3 显式匹配5.3.1 Limit匹配5.3.2 MAC匹配5.3.3 Mark匹配5.3.4 Multiport匹配5.3.5 State匹配5.3.6 TOS匹配5.3.7 TTL匹配 6.目标/跳跃6.1 ACCEPT target6.2 DNAT target6.3 DROP target6.4 LOG target6.5 MARK target6.6 MASQUERADE target6.7 REDIRECT target6.8 REJECT target6.9 RETURN target6.10 SNAT target6.11 TOS target6.12 TTL target 1.基本语法 基本语法如下: iptables [-t table ] command [match] [target/jump] 对于这个句法没什么可说的,但注意 target 指令必须在最后。为了易读,我们一般用这种语法。总之,你将见到的大部分规则都是按这种语法写的。在[table]处指定表名。一般情况下没有必要指定使用的表,因为 iptables 默认使用 filter 表来执行所有的命令
  • iptables的命令参数详解
    iptables是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的IP判断是否需要转送出去,接着就会跳到INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则链的过滤,并依照前述流程继续进行下一个规则链的过滤(注意:这一点与ipchains不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables可以进行纵横交错式的过滤(tables)而非链状过滤(chains)。ACCEPT 将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(nat:postrouting)。 那么如何使用iptables在以上流程中控制对数据包的处理行为呢?当然是使用iptables与其相关的参数了。 1、iptables命令格式
  • 回文检测效率(Palindrome detection efficiency)
    问题 我对乔恩·林贾普(Jon Limjap)的采访事故感到好奇,并开始寻找有效的方法来进行回文检测。 我检查了回文高尔夫球场答案,在我看来,答案中只有两个算法,即反转字符串并从尾巴和头部进行检查。 def palindrome_short(s): length = len(s) for i in xrange(0,length/2): if s[i] != s[(length-1)-i]: return False return True def palindrome_reverse(s): return s == s[::-1] 我认为这些方法都不能用于检测巨大DNA序列中的精确回文。 我四处张望,却没有找到任何免费的文章介绍这可能是一种超高效的方法。 一个好的方法可能是采用分而治之的方法并行化第一个版本,为每个线程或处理器分配一对char数组1..n和length-1-n..length-1。 有什么更好的方法? 你知道任何? 回答1 仅考虑一个回文,您将必须在O(N)中进行,是的。 如您所说,通过分割字符串,可以提高多处理器的效率。 现在说您要进行精确的DNA匹配。 这些字符串的长度为数千个字符,并且非常重复。 这使我们有机会进行优化。 假设您将1000个字符的字符串分成5对100,100。 该代码将如下所示: isPal(w[0:100],w[-100:]) and
  • “ if”语句过多?(Too many 'if' statements?)
    问题 以下代码确实可以满足我的需要,但是它很丑陋,过多或其他许多事情。 我已经看过公式并尝试编写一些解决方案,但最终得到了类似数量的语句。 在这种情况下,是否有一种对我有利的数学公式?如果可接受的话,该公式是否为16? 为了说明代码,它是针对一种基于同时回合的游戏。.两个玩家每个都有四个动作按钮,结果来自数组(0-3),但是变量“ one”和“ two”可以是如果有帮助,则分配任何东西。 结果是0 =都不赢,1 = p1赢,2 = p2赢,3 =双方赢。 public int fightMath(int one, int two) { if(one == 0 && two == 0) { result = 0; } else if(one == 0 && two == 1) { result = 0; } else if(one == 0 && two == 2) { result = 1; } else if(one == 0 && two == 3) { result = 2; } else if(one == 1 && two == 0) { result = 0; } else if(one == 1 && two == 1) { result = 0; } else if(one == 1 && two == 2) { result = 2; } else if(one
  • Linux C ++:如何分析由于高速缓存未命中而浪费的时间?(Linux C++: how to profile time wasted due to cache misses?)
    问题 我知道我可以使用gprof对我的代码进行基准测试。 但是,我有这个问题-我有一个智能指针,该指针具有额外的间接级别(可以将其视为代理对象)。 结果,我有了这个额外的层,几乎可以实现所有功能,并带有缓存功能。 有没有一种方法可以测量由于高速缓存未命中而导致CPU浪费的时间? 回答1 您可以尝试使用cachegrind,它是前端kcachegrind。 回答2 您可以找到访问CPU性能计数器的工具。 每个内核中可能都有一个寄存器,该寄存器对L1,L2等未命中计数。 或者,Cachegrind执行逐周期仿真。 但是,我认为这不是有见地的。 您的代理对象大概是由它们自己的方法修改的。 传统的探查器会告诉您这些方法需要花费多少时间。 没有任何配置文件工具可以告诉您,如果没有这种缓存污染源,性能将如何提高。 这是减少程序工作集的大小和结构的问题,这不容易推断。 快速的Google搜索显示了boost :: intrusive_ptr,您可能会感兴趣。 它似乎不支持诸如weak_ptr东西,但是转换程序可能是微不足道的,然后您肯定会知道非侵入式引用计数的成本。 回答3 Linux从2.6.31开始支持perf。 这使您可以执行以下操作: 用-g编译代码以包含调试信息运行您的代码,例如使用最后一级的缓存未命中计数器: perf record -e LLC-loads,LLC-load
  • 按值对CouchDB视图进行排序(Sorting CouchDB Views By Value)
    问题 我正在测试CouchDB,以了解它如何处理记录一些搜索结果。 我想做的是产生一个视图,在这里我可以从结果中产生最重要的查询。 目前,我有这样的事情: 示例文档部分 { "query": "+dangerous +dogs", "hits": "123" } 地图功能(不完全是我所需要/想要的,但足以用于测试) function(doc) { if (doc.query) { var split = doc.query.split(" "); for (var i in split) { emit(split[i], 1); } } } 减少功能 function (key, values, rereduce) { return sum(values); } 现在,这将使我得到以下格式的结果:查询项是键,而该项的计数在右侧,这很棒。 但我希望它按值而不是键排序。 从它的声音来看,CouchDB尚不可能做到这一点。 那么,有没有人对我如何获得一个查询词及其相关计数的有序版本的视图有任何想法? 我对CouchDB非常陌生,只是想不出如何编写所需的函数。 回答1 确实,没有简单的答案。 但是,有几种模式。 http://wiki.apache.org/couchdb/View_Snippets#Retrieve_the_top_N_tags。 我个人不喜欢这样
  • 如何判断XMLHTTPRequest是否命中了浏览器缓存(How to tell if an XMLHTTPRequest hit the browser cache)
    问题 是否可以判断(在javascript执行期间)GET XMLHTTPRequest是否命中了浏览器缓存,而不是从服务器获取响应? 回答1 从XMLHttpRequest规范: 对于由用户代理生成的条件请求导致的304未修改响应,用户代理必须像服务器给出200 OK响应并提供适当的内容一样起作用。 换句话说,即使对于命中浏览器缓存的请求,浏览器也将始终给出状态码200 OK。 但是,规范还说: 用户代理必须允许作者请求标头覆盖自动缓存验证(例如,If-None-Match或If-Modified-Since),在这种情况下,必须传递304 Not Modified响应。 因此,有一种解决方法可以使304 Not Modified响应对您的JavaScript代码可见。 回答2 发出ajax请求时,您将获得响应代码 if (request.readyState == 4) { if (request.status == 200) { // this number. ... 状态200表示您正在获取数据的全新副本: 该请求已成功。 响应返回的信息取决于请求中使用的方法- 状态304表示数据未更改,您将从浏览器缓存中获取数据: 如果客户端已经执行了有条件的GET请求,并且允许访问,但是文档没有被修改,则服务器应该以该状态码响应。 进一步了解状态码 更新:
  • loadrunner常用计数器分析
    loadrunner常用计数器分析 2013-07-27 17:25 狂师 阅读(482) 评论(0) 编辑 收藏 内存是第一个监视对象,确定系统瓶颈的第一个步骤就是排除内存问题。内存短缺的问题可能会引起各种各样的问题。Object(对象)CountersDescription(描述)参考值MemoryAvailable MBytes物理内存的可用数(单位 Mbytes)。默认情况下IIS5.0 使用50%的可用物理内存,作为IIS 的文件缓存(file cache)。IIS 基本占用 2.5 MB,每个附加连接将在此基础上占用 10 KB 左右至少要有10% 的物理MemoryPage/sec Page Faults/sec Pages Input/secPages Input/sec Page Reads/sec Transition Faults/sec 物理内存的可用数(单位 Mbytes)。默认情况下IIS5.0 使用50%的可用物理内存,作为IIS 的文件缓存(file cache)。IIS 基本占用 2.5 MB,每个附加连接将在此基础上占用 10 KB 左右。至少要有10% 的物理内存值当处理器向内存指定的位置请求一页(可能是数据或代码)出现错误时,这就构成一个Page Fault。如果该页在内存的其他位置,该错误被称为软错误(用Transition Fault
  • 动态编程-最大的方块(Dynamic programming - Largest square block)
    问题 我需要在一个充满1和0的巨型文件中找到1的最大平方。 我知道我必须使用动态编程。 我将其存储在2D数组中。 该算法对找到最大平方的任何帮助将是巨大的,谢谢! 输入示例: 1 0 1 0 1 0 1 0 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 回答: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 到目前为止,我的代码: int Square (Sq[int x][int y]) { if (Sq[x][y]) == 0) { return 0; } else { return 1+MIN( Sq(X-1,Y), Sq(X,Y-1), Sq(X-1,Y-1) ); } } (假设值已经输入到数组中) int main() { int Sq[5][6]; //5,6 = bottom right conner int X = Square(Sq[5][6]); } 我怎么从那里继续? 回答1 这是解决方案的草图: 对于每个单元格,我们将保留一个计数器,该计数器将使用该单元格作为左上角的正方形可以做多大。 显然,所有具有0的单元格的计数都为0。 从右下角的单元格开始迭代,然后移至左下角,然后向上一行进行重复。 在每次扫描时,请执行以下操作: 如果单元格具有0,则分配count=0 如果单元格具有1并且是边缘单元格
  • iptables详解(2):iptables实际操作之规则查询
    如果你是一个新手,在阅读如下文章时,请坚持读到最后,读的过程中可能会有障碍,但是在读完以后,你会发现你已经明白了。 在进行iptables实验时,请务必在测试机上进行。 之前在iptables的概念中已经提到过,在实际操作iptables的过程中,是以"表"作为操作入口的,如果你经常操作关系型数据库,那么当你听到"表"这个词的时候,你可能会联想到另一个词----“增删改查”,当我们定义iptables规则时,所做的操作其实类似于"增删改查",那么,我们就先从最简单的"查"操作入手,开始实际操作iptables。 在之前的文章中,我们已经总结过,iptables为我们预定义了4张表,它们分别是raw表、mangle表、nat表、filter表,不同的表拥有不同的功能。 filter负责过滤功能,比如允许哪些IP地址访问,拒绝哪些IP地址访问,允许访问哪些端口,禁止访问哪些端口,filter表会根据我们定义的规则进行过滤,filter表应该是我们最常用到的表了,所以此处,我们以filter表为例,开始学习怎样实际操作iptables。 怎样查看filter表中的规则呢?使用如下命令即可查看。 上例中,我们使用-t选项,指定要操作的表,使用-L选项,查看-t选项对应的表的规则,-L选项的意思是,列出规则,所以,上述命令的含义为列出filter表的所有规则,注意,上图中显示的规则