精华内容
下载资源
问答
  • 个常用的UML关系

    万次阅读 2018-04-10 16:52:48
    本文转自UML常用图的几种关系的总结 - 拥抱变化 - 博客频道 - CSDN.NET http://blog.csdn.net/suxinpingtao51/article/details/8011335在UML的类图中,常见的有以下几种关系: 泛化(Generalization), 实现...

    本文转自UML常用图的几种关系的总结 - 拥抱变化 - 博客频道 - CSDN.NET http://blog.csdn.net/suxinpingtao51/article/details/8011335

    在UML的类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)


    1.       泛化(Generalization

    【泛化关系】:是一种继承关系表示一般与特殊的关系它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性.

    【箭头指向】:带三角箭头的实线,箭头指向父类

     

     

    2. 实现(Realization

    【实现关系】:是一种类与接口的关系表示类是接口所有特征和行为的实现.

    【箭头指向】:带三角箭头的虚线,箭头指向接口

     

    3. 关联(Association)

    【关联关系】:是一种拥有的关系它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

    关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

    【代码体现】:成员变量

    【箭头及指向】:带普通箭头(或实心三角形箭头)的实心线,指向被拥有者

     

    上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

     

    上图为自身关联:

     

    4. 聚合(Aggregation

    【聚合关系】:是整体与部分的关系且部分可以离开整体而单独存在如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

    聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

    【代码体现】:成员变量

    【箭头及指向】:带空心菱形的实心线,菱形指向整体

     

     

    5. 组合(Composition)

    【组合关系】:是整体与部分的关系但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.

           组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

    【代码体现】:成员变量

    【箭头及指向】:带实心菱形的实线,菱形指向整体

     

     

    6. 依赖(Dependency)

    【依赖关系】:是一种使用的关系,  即一个类的实现需要另一个类的协助所以要尽量不使用双向的互相依赖.

    【代码表现】:局部变量、方法的参数或者对静态方法的调用

    【箭头及指向】:带箭头的虚线,指向被使用者

     

     

     

    各种关系的强弱顺序:

    泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

    下面这张UML图,比较形象地展示了各种类图关系:

     

     

    ====================================================

    序列图主要用于展示对象之间交互的顺序。

    序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。

    消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

     

    序列图中涉及的元素:

    1.   生命线:

    生命线名称可带下划线。当使用下划线时,意味着序列图中的生命线代表一个类的特定实体。

     

     

    2.       同步消息

    发送人在它继续之前,将等待同步消息响应

     

    3.       异步消息

    在发送方继续之前,无需等待响应的消息

     

    4.       注释

     

    5.       约束

    约束的符号很简单;格式是: [Boolean Test]

     

    6.       组合片段

    组合片段 用来解决交互执行的条件及方式。 它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。

    常用的组合片段有:

    a.       抉择(Alt)

    抉择用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if..else..。

    抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

     

    b.       选项(Opt)

    包含一个可能发生或不发生的序列

    c.       循环(Loop)

    片段重复一定次数。 可以在临界中指示片段重复的条件。

     

    d.       并行(Par)

     

    下表列出了常用的组合片段:

    片段类型

    名称

    说明

    Opt

    选项

    包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。

    Alt

    抉择

    包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。

    可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

    Loop

    循环

    片段重复一定次数。 可以在临界中指示片段重复的条件。

    Loop 组合片段具有“Min”“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。

    Break

    中断

    如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。

    Par

    并行

    并行处理。 片段中的事件可以交错。

    Critical

    关键

    用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。

    Seq

    弱顺序

    有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。

    Strict

    强顺序

    有两个或更多操作数片段。 这些片段必须按给定顺序发生。

     

    有关如何解释序列的片段

    默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。

    以下片段类型可用于更改此释义:

    片段类型

    名称

    说明

    Consider

    考虑

    指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。

    “Messages”属性中键入该列表。

    Ignore

    忽略

    此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。

    “Messages”属性中键入该列表。

    Assert

    断言

    操作数片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。

    Neg

    否定

    此片段中显示的序列不得发生。 通常用在 Consider 或 Ignore 片段中。

     


    ====================================================

    用例图主要用来描述 用户、需求、系统功能单元 之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。

    【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。

     

    用例图所包含的元素如下:

    1.       参与者(Actor)

    表示与您的应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。

     

    2.       用例(Use Case)

     用例就是外部可见的系统功能,对系统提供的服务进行描述。 用椭圆表示

    3.       子系统(Subsystem)

    用来展示系统的一部分功能,这部分功能联系紧密。

     

    4.       关系

    用例图中涉及的关系有:关联、泛化、包含、扩展;

    如下表所示:

    关系类型

    说明

    表示符号

    关联

    参与者与用例间的关系

    泛化

    参与者之间或用例之间的关系

    包含

    用例之间的关系

    扩展

    用例之间的关系

    a.       关联(Association)

    表示参与者与用例之间的通信,任何一方都可发送或接受消息。

    【箭头指向】:指向消息接收方

     

     

    b.      泛化(Inheritance)

    就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。

    【箭头指向】:指向父用例

    c.       包含(Include)

    包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤;

    【箭头指向】:指向分解出来的功能用例

     

    d.      扩展(Extend)

        扩展关系是指 用例功能的延伸,相当于为基础用例提供一个附加功能。

       【箭头指向】:指向基础用例

     

     

    e.       依赖(Dependency)

    以上4中关系,是UML定义的标准关系。 但VS2010的用例模型图中,添加了依赖关系,用带箭头的虚线表示

    表示源用例依赖于目标用例;

    【箭头指向】:指向被依赖项

     

    5.       项目(Artifact)

    用例图虽然是用来帮助人们形象地理解功能需求,但却没多少人能够通看懂它。很多时候跟用户交流甚至用Excel都比用例图强,VS2010中引入了“项目”这样一个元素,以便让开发人员能够在用例图中链接一个普通文档。

    用依赖关系把某个用例依赖到项目上

     

    然后把项目-》属性 的Hyperlink 设置到你的文档上

    这样当你在用例图上 双击项目时,就会打开相关联的文档。

     

    6.       注释(Comment)

     

     

    包含(include)、扩展(extend)、泛化(Inheritance) 的区别:

    条件性:泛化中的子用例和include中的被包含的用例会无条件发生,而extend中的延伸用例的发生是有条件的;

    直接性:泛化中的子用例和extend中的延伸用例为参与者提供直接服务,而include中被包含的用例为参与者提供间接服务。

    对extend而言,延伸用例并不包含基础用例的内容,基础用例也不包含延伸用例的内容。

    Inheritance而言,子用例包含基础用例的所有内容及其和其他用例或参与者之间的关系;

     

    一个用例图示例:

     

     

    牢骚:

    感觉用例图还不成熟,并不能很好地表达系统的需求, 没有UML背景的用户几乎不知道画的些什么。

    其次,包含关系、扩展关系 的箭头符号竟然是同样的箭头,仅靠上方写个文字来加以区别,翻译成其他语言的话,几乎就不知道代表什么意思。  扩展关系的箭头朝向也很难理解,为何要指向基用例,而不指向扩展用例

    VS2010添加的“项目”元素,是个很好的创新,能够在用例图中关联word,excel这些文档。但为什么不把这些功能直接集成到用例里面,双击用例就弹出一份文档岂不更容易理解,非要画蛇添足地加一个元件,仅仅为了提供个链接功能。

     

     

    用例描述表:

    鉴于用列图并不能清楚地表达功能需求,开发中大家通常用描述表来补充某些不易表达的用例,下图的表给大家提供一个参考:

    展开全文
  • 功能码 描述 PLC地址位 寄存器地址位 位/字操作 操作数量 01H 读线圈寄存器 00001-09999 0000H-FFFFH 位操作 单个或多 02H 读离散输入寄存器 10001-19999 0000H-FFFFH...
    功能码描述PLC地址位寄存器地址位位/字操作操作数量
    01H读线圈寄存器00001-099990000H-FFFFH位操作单个或多个
    02H读离散输入寄存器10001-199990000H-FFFFH位操作单个或多个
    03H读保持寄存器40001-499990000H-FFFFH字操作单个或多个
    04H读输入寄存器30001-399990000H-FFFFH字操作单个或多个
    05H写单个线圈寄存器00001-099990000H-FFFFH位操作单个
    06H写单个保持寄存器40001-499990000H-FFFFH字操作单个
    0FH写多个线圈寄存器00001-099990000H-FFFFH位操作多个
    10H写多个保持寄存器40001-499990000H-FFFFH字操作多个

    厂商给的点位表里面有个MODBUS数据地址为10001和40001两种:

    地址位00001用01功能码读取

    地址位10001用02功能码读取

    地址位40001用03功能码读取

    地址位30001用04功能码读取

     

    原来PLC地址位这么用的

    展开全文
  • eclipse常用功能

    千次阅读 2018-07-14 18:28:47
    调试常用功能介绍日常java开发中实际写代码的时间并不会很多,花在整理思路,代码重构,调试bug会占用很大部分时间。 熟练掌握调试工具,了解调试相关技巧,是java开发中减少调试时间,提高效率不可或缺的一部分。...

    调试常用功能介绍

    日常java开发中实际写代码的时间并不会很多,花在整理思路,代码重构,调试bug会占用很大部分时间。 
    熟练掌握调试工具,了解调试相关技巧,是java开发中减少调试时间,提高效率不可或缺的一部分。 
    使用System.out.println作为调试主要工具的方法,是java初学者对着书本例子敲代码的做法。

    一、调试相关的常用窗口

    调试中最常用的窗口是:

    窗口说明
    Debug窗口主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码)
    断点Breakpoints窗口=> 断点列表窗口,可以方便增加断点,设置断点条件,删除断点等
    变量Variables窗口=> 显示当前方法的本地变量,非static方法,包含this应用,可以修改变量值
    代码编辑窗口=> 这个不用多说了
    输出Console窗口=> 日志等输出内容,调试时,可以将关注的组件级别设置低一点,以便获得跟多输出信息

    另外辅助的窗口有:

    窗口说明
    表达式expression窗口=> 写上自己需要观察的数据的表达式,或者修改变量值
    Display窗口=> 可以在display中执行代码块,输出内容等
    大纲Outline窗口=> 查看当前类的方法,变量等
    类型层级Type hierarchy窗口=> 查看当前所在类的继承层次,包括实现接口,类继承层次
    方法调用关系Call hierarchy窗口=> 查看当前方法被哪些方法调用,调用方法在哪些类中、第几行,可以直接打开对应的方法
    搜索结果Search窗口=> 结合快捷键可以查看变量、方法等在工作空间、项目、工作集中被引用或定义的代码位置

    窗口全览

    all_window_over_view

    二、断点类型及断点窗口

    在调试中可以设置的断点类型有五种: 行断点(line breakpoints),方法断点(method breakpoints ),观察断点(watch breakpoints-成员变量访问变更),异常断点(exception breakpoints), 类加载断点(class load breakpoints)。每种断点的设置有些许不一样,可以在断点上右键->Breakpoint properties进行设置,但一般在断点窗口有快速设置的界面,Breakpoint properties中多了filter, 其实比较鸡肋,用处不大。

    断点相关的快捷键

    快捷键说明
    ctrl+shift+b在光标处大断点/取消断点
    ctrl+alt+b忽略所有断点
    Alt+shift+q, b激活断点窗口

    1、行断点: 在方法中的某一行上打断点1.1、1.4。行断点可以设置挂起线程/VM的条件1.3,访问次数1.2。 
    1.3中的条件是,spring在注册Bean定义(registerBeanDefinition)时,如果是org.springframework.demo.MyBean,就挂起线程,可以开始单步调试了。 
    对于命中次数(hit count)1.2的使用,一般是在循环中,第N个对象的处理有问题,设置hit count = N, 重调试时,可以方便到达需要调试的循环次数时,停下来调试。

    2、方法断点:在方法上打断点2.1、2.2。方法断点的好处是可以从方法方法进入或者退出时2.3,停下来调试,类似行断点,而且只有行断点和方法断点有条件和访问次数的设置功能。 
    但是方法断点还有另外一个好处,如果代码编译时,指定不携带调试信息,行断点是不起作用的,只能打方法断点。 
    有兴趣的可以通过A1将Add line number… 前的勾去掉, 调试下看看。

    line_and_method_breakpoints

    3、观察断点: 在成员变量上打的断点3.1、3.3。只有对象成员变量有效果,静态成员变量不起作用。 
    可以设置变量被访问或者设置的时候挂起线程/VM 3.2,也就是类似3.4的所有对成员变量的访问或者设置的方法都会被监控到 
    4、异常断点: 异常断点可以通过4.6添加,或者点击日志信息中输出的异常类信息添加。 
    异常断点4.1,系统发生异常时,在被捕获异常的抛出位置处或者程序未捕获的异常抛出处4.2、4.4, 挂起线程/VM, 也可以指定是否包括异常的子类也被检测4.3、4.5。 
    另外除了以上正常设置的异常挂起,从java->debug中可以设置挂起执行,主要有下面两个: 1、是否在发生全局未捕获时挂起(suspend execution on uncaught exceptions),调试时,老是有异常挂起影响调试,但是没有设置异常断点的情况,就可以勾选掉这个选项;2、是否在编译错误时挂起,一般在边调试边改代码时会发生这种情况;

    另外要提一个的是有main方法启动的应用,可以在调试配置中勾选stop in main A3, 程序进入时,会挂起线程,等待调试。

    watch_and_exception_breakpoints

    5、类加载断点: 在类名上打的断点5.1。接口上是打不了类加载断点的,但是抽象类是可以的,只是在调试的时候,断点不会明显进入classloader中,单步进入知会进入到子类的构造方法中,非抽象类在挂起线程后单步进入就会到classloader中(如果没有filter过滤掉的话)5.3。类加载断点不管是打在抽象或者非抽象类上,都会在类第一次加载或者第一个子类第一次被加载时,挂起线程/VM 5.2

    class_load_breakpoints

    三、Debug窗口、代码窗口,快捷键

    打完断点进入调试阶段,调试过程中最主要的就是调试窗口和代码窗口, 调试窗口和代码窗口的右键菜单、使用的快捷键以及达到的效果都值得深入了解;

    Debug窗口右键菜单及快捷键:如A6所示。 
    代码窗口右键菜单及快捷键:如A7所示。

    下面将按照功能,结合A6、A7一起说明:

    1、调试执行

    标记功能快捷键描述
    6.4Step InfoF5-> 单步进入(如果有方法调用,将进入调用方法中进行调试);
    6.4Step OverF6-> 单步跳过(不进入行的任何方法调用中,直接执行完当前代码行,并跳到下一行);
    6.4Step ReturnF7-> 单步返回(执行完当前方法,并从调用栈中弹出当前方法,返回当前方法被调用处);
    6.5ResumeF8-> 恢复正常执行(直到遇到下一个断点);
    7.4Run to LineCtrl+R-> 执行到当前行(将忽略中间所有断点,执行到当前光标所在行);
    6.3Drop To Frame-> 回退到指定方法开始处执行,这个功能相当赞
    在方法调用栈上的某个方法右键,选择Drop To Frame就可以从该方法的开始处执行
    比如重新执行本方法,可以在本方法上用Drop To Frame,将从本方法的第一行重新执行。
    当然对于有副作用的方法,比如数据库操作,更改传入参数的对象内容等操作可能重新执行就再是你想要的内容了。
    6.1+6.2Copy Stack-> 拷贝当前线程栈信息

    如果在调试时,需要排除一些类、包等不需要进入调试,可以使用Edit Step Filters设置。 
    A6的properties: Java进程启动相关信息,包括控制台启动参数,环境参数等。如果参数启动参数有问题可以先看看这里的实际启动参数是不是有误。另外还可以查看虚拟机支持调试的相关选项。

    debug_and_code_window

    2、数据查看

    标记功能快捷键描述
    7.4Inspectctrl+shift+i-> 察看选择的变量、表达式的值或执行结果, 再次按ctrl+shift+i可以将当前表达式或值添加到Expressions窗口中查看;
    7.4Displayctrl+shift+d-> 显示选择的变量、表达式的值或执行结果, 再次按ctrl+shift+d可以将当前表达式或值添加到Display窗口中显示;
    7.4Executectrl+u-> 执行选择表达式;
    7.4Run to Linectrl+r-> 执行到当前行(将忽略中间所有断点,执行到当前光标所在行);
    7.3All Instancesctrl+shift+n-> 查看选择的类的所有对象,这个功能超赞;
    7.3Instance Count-> 查看选择的类的所有对象个数;
    7.4Watch-> 添加当前变量、表达式到Expressions窗口中;

    四、调试时窗口

    1、Display窗口A8 
    在Display窗口中,可以执行代码之外的任何合理的语句,也可以使用Inspect, Display, Execute这些方式查看或者执行语句——8.1。 
    比如, a、输入com.alibaba.fastjson.JSON.toJSONString(registry, true); 并选择这一行代码,ctrl+shift+d,可以执行这行代码并在Display窗口中输出结果——8.2。 
    b、当然也可以改变当前代码的变量值,比如输入beanName = “myBeanX”; 选择这行代码,用Inspect, Display, Execute这几种方式都可以执行这行代码。 
    c、也可以输入System.out.println(com.alibaba.fastjson.JSON.toJSONString(registry, true)); 执行就会在console窗口输出结果。

    2、Variables窗口A9 
    在Variable窗口中可以看到当前方法的本地变量值8.3,非静态方法会有this表示对象自己,也可以查看本地变量相应的属性8.4, 8.5的功能可以让集合类型对象中的数据显示容易看点。 
    这个窗口除了察看变量的功能之外,还可以直接在Value列修改变量值或对象属性。

    3、Expression窗口A10 
    Expression窗口的功能主要是用来察看变量之外的表达式的结果,执行固定表达式等功能。比如察看变量definitionHolder中的属性beanDefinitionHolder, 直接将definitionHolder.getBeanDefinition()加入到Expressions窗口8.6, 8.7

    display_variables_expression_window

    五、代码查看辅助窗口

    1、代码窗口

    标记功能快捷键描述
    11.1~11.5quick type hierarchyctrl+t查看当前类、接口的继承层次, 默认进入时,显示继承/实现当前类/方法的子类,子接口11.1;再次ctrl+t,将显示当前类、接口继承/实现的超类/接口11.2;调试时,经常用该功能,在接口或抽象类的方法调用处11.3,ctrl+t察看实现类11.4,直接导航到对应的实现方法中11.5。
     quick outlinectrl+o查看当前类的大纲,包括方法,属性等内容; 用处不大;
     open declarationsF3查看变量、属性、方法定义的地方

    code_window_hotkeys

    2、Call Hierarchy窗口:

    标记功能快捷键描述
    12.1~12.2open call hierarchyctrl+alt+h查看方法被调用层次, 可以看当前方法被调用的地方12.1,或者当前方法调用了其他类的方法12.2

    call_hierarchy

    3、Type Hierarchy窗口

    标记功能快捷键描述
    13.1~13.4open type hierarchyF4查看继承层次, 可以查看类的继承层次,包括子类父类13.1, 或者类实现的接口继承层次13.2,还会根据选择的类/接口,在右边显示该类的大纲13.3、 13.4; 13.3可以选择是否显示父类/父接口的属性、方法等

    type_hierarchy

    4、Search 窗口

    标记功能快捷键描述
    14.1declarationsctrl+g相同的方法签名在工作空间中及第三方jar包中被定义的位置14.1
    14.2referencesctrl+shif+g当前选中的变量、属性、方法在工作空间中及第三方jar包中被引用的位置14.2
    14.3 ctrl+shift+u查看变量、属性 、方法在当前类中出现的地方14.3
    14.4implements 查看实现当前接口的类14.8
    14.4~14.7显示方式 可以选择不同的显示方式,具体看图

    search_window

    展开全文
  • iptables 常用功能总结

    千次阅读 2015-11-21 23:06:24
    iptables 常用功能总结iptables 是一用于 IP 访问控制的工具,可以通过 iptables 实现一些防火墙和 NAT 的功能,以下是对 iptables 常用功能的总结 包含 iptables 基本概念,常用配置和一些常用的配置

    iptables 常用功能总结


    iptables 是一个用于 IP 访问控制的工具,可以通过 iptables 实现一些防火墙和 NAT 的功能,以下是对 iptables 常用功能的总结

    基本概念

    iptables 的 5 条链和 4 张表

    iptables 调用内核 Netfilter 进行 IP 访问控制设置,而 Netfilter 在网络层有 5 个钩子:

    • PRE_ROUTING
    • INPUT
    • OUTPUT
    • FORWARD
    • POST_ROUTING

    对应了 iptables 的 5 条链:

    • PREROUTING
    • INPUT
    • OUTPUT
    • FORWARD
    • POSTROUTING

    另外 iptables 有四张表,这四张表即配置了 5 条链上 IP 访问控制规则,这四张表分别为:

    • filter:访问控制,规则匹配
    • nat:地址转发
    • mangle:修改数据包,改变包头中的内容(TTL,MARK等)
    • raw:数据报状态跟踪,分析

    一般常用到的表为 filter 和 nat 表,iptables 使用 -t 来指定要访问的表,如果不指定,默认为 filter 表,如下面查看 filter 表和 nat 表中的内容:

    [root@AlexWoo-CentOS ~]# iptables -t nat -nL
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 8080 
    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 redir ports 8443 
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    [root@AlexWoo-CentOS ~]# iptables -t filter -nL
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8443 
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination     
    

    5 条链和 4 张表的对应关系

    • 当从其它主机收到一个 IP 包:

      1. 先进入 PREROUTING 链,这个时候可以使用 nat、mangle 和 raw 表中配置的规则
      2. 如果目的地址为本机,进入 INPUT 链,这个时候可以使用 filter 和 mangle 表中配置的规则,处理完成后交到对应的应用进程进行处理
      3. 如果目的地址不是本机,进入 FORWARD 链,这个时候可以使用 filter 和 mangle 表中配置的规则
      4. 最后进入 POSTROUTING 链,这个时候可以使用 nat 和 mangle 表中配置的规则
    • 当本机向外主动发送一个 IP 包:

      1. 先进入 OUTPUT 链,这个时候可以使用 filter、nat、mangle 和 raw 表中配置的规则
      2. 如果目的地址是本机,进入 INPUT 链,这个时候可以使用 filter 和 mangle 表中配置的规则,处理完成后交到对应的应用进程进行处理
      3. 如果目的地址不是本机,进入 POSTROUTING 链,这个时候可以使用 nat 和 mangle 表中配置的规则

    常用命令

    注:以下只是常用的命令,不包含所有命令,如有兴趣,可以自己通过 man 或其它资料进行研究

    查看规则

    iptables [-t

    清除规则

    iptables [-t

    删除规则

    iptables [-t

    添加规则

    iptables [-t <table\>] -A|-I <chain\> <rule-specification\>
    

    这里 -A 表示在规则链尾部追加一条新规则,-I 表示在规则链头部追加一条新规则。对于 rule-specification 的说明如下

    rule-specification

    rule-specification 由三部分组成(注:一般常用的是 -j,当然还有其它用法,这里不做说明,有兴趣可以自己 man):

    parameters

    注:这里只是列举常用的parameters,不包含所有,以下命令可能会导致远程终端连不上主机,慎用

    • -p 用于指定协议,如 tcp,udp,sctp,icmp 等,即当协议满足这些协议时,参数前可添加 ! 表示非关系,如:

      iptables -I INPUT ! -p tcp -j REJECT
      

      这个命令添加后,该机器会拒绝 TCP 协议外的其它协议访问

    • -s 指定源地址,如 192.168.0.2 或 192.168.0.2/24,后一种为添加掩码的方式,参数前可添加 ! 表示非关系,如:

      iptables -I INPUT -s 127.0.0.1 -j REJECT
      
    • -d 指定目的地址,同上,只是对目的地址的限定,如:

      iptables -I INPUT -d 127.0.0.1 -j REJECT
      
    • -i 指定网卡接口,如 lo,参数前可添加 ! 表示非关系

      iptables -I INPUT -i lo -j REJECT
      
    • –sport 指定源端口,必须和 -p tcp/udp 等配合使用,如 40000 为指定一个端口 40000,40000:50000 为指定一个端口范围 40000-50000 端口,参数前可添加 ! 表示非关系

      iptables -I INPUT -p tcp --sport 40000:50000 -j ACCEPT
      
    • –dport 指定目端口,如 40000 为指定一个端口 40000,40000:50000 为指定一个端口范围 40000-50000 端口,参数前可添加 ! 表示非关系

      iptables -I INPUT -p tcp --dport 80 -j ACCEPT
      
    • -m 指定模块名,如需要 –state 来匹配连接状态,连接状态在 state 模块下,因此要先使用 -m 来加载 state 模块才能使用 –state

    • –state 表示连接状态,多个连接状态可以用 , 隔开,如 ESTABLISH,RELATED。几种可选值

      • INVALID 表示一些未知的错误,如 ICMP 错误,运行过程中内存不足等
      • ESTABLISH 表示已经建立了连接
      • NEW 表示已经发送了连接请求
      • RELATED 表示正在发送连接请求

      一般配置中常见的为 ESTABLISH,RELATED

      iptables -I INPUT -m state --state ESTABLISH,RELATED -j ACCEPT
      

    target

    ACCEPT

    表示允许通过

    iptables -I INPUT -p icmp -j ACCEPT
    

    DROP

    表示丢弃 IP 包

    iptables -I INPUT -p icmp -j DROP
    

    REJECT

    表示拒绝 IP 包

    –reject-with

    使用 reject 可以指定拒绝时回送的 ICMP 包:

    • icmp-net-unreachable
    • icmp-host-unreachable
    • icmp-port-unreachable
    • icmp-proto-unreachable
    • icmp-net-prohibited
    • icmp-host-prohibited
    • icmp-admin-prohibited

    不指定默认为 icmp-port-unreachable

    iptables -I INPUT -p icmp -j REJECT
    iptables -I INPUT -p icmp -j REJECT --reject-with icmp-host-prohibited
    

    SNAT

    SNAT 只能在 POSTROUTING 链的 nat 表中进行配置,用于修改源端地址和端口

    –to 和 –to-source 相同,在 SNAT 中都是将 IP 包的源端地址改为指定的地址,可以指定为一个地址,一个地址段,地址段+端口,地址段+端口段的形式,如以下几种形式,–to 可以替换成 –to-source

    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j SNAT --to 127.0.0.2
    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j SNAT --to 127.0.0.2,127.0.0.1
    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j SNAT --to 127.0.0.1:50000
    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j SNAT --to 127.0.0.1:40000-50000
    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j SNAT --to 127.0.0.1-127.0.0.10:40000-50000
    

    DNAT

    DNAT 能在 POSTROUTING 和 OUTPUT 链的 nat 表中进行配置,用于修改目的端地址和端口

    –to 和 –to-destination 相同,在 DNAT 中都是将 IP 包的目的端地址改为指定的地址,与 SNAT 相同可以指定为一个地址,一个地址段,地址段+端口,地址段+端口段的形式,格式与表示方法相同,这里只举一个例子:

    iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.2:8080
    

    REDIRECT

    REDIRECT 能在 POSTROUTING 和 OUTPUT 链的 nat 表中进行配置,只能用于修改目的端口,不能修改目的 IP 地址

    –to-ports 可以指定一个端口或一个端口段

    iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
    iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-8082
    

    规则永久生效

    使用上面的命令修改的规则,只是临时生效,如果系统重启,将会丢失,如果要永久生效,可以使用下面的方法:

    service iptables save
    

    或者

    iptables-save > /etc/sysconfig/iptables
    

    一些有用的规则

    基础安全配置

    一般 iptables 安装后默认配置如下

    • 允许 lo 接口的所有访问
    • 允许使用 ssh 服务
    • 允许外部 ping 本机
    • 允许已建立的连接和向外建立连接
    • 其它外部访问禁止

      iptables -I INPUT -i lo -j ACCEPT
      iptables -I INPUT -p icmp -j ACCEPT
      iptables -I INPUT -m state --state ESTABLISH,RELATED -j ACCEPT
      iptables -I INPUT -p tcp --dport 22 -j ACCEPT
      iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
      iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
      

    禁止外部 ping

    返回主机无法访问

    iptables -I INPUT -p icmp -j REJECT --reject-with icmp-host-prohibited
    

    不返回任何结果,这种情况就像网络不通一样

    iptables -I INPUT -p icmp -j DROP
    

    HTTP 服务配置

    为安全起见,一般 HTTP 服务使用非 root 账户启动,非 root 账户不能绑定 1024 以内的端口,因此,一般 HTTP 服务启动于 8080 端口。为了让外部能直接使用 HTTP 端口,需要以下配置:

    • 打开 8080 端口的访问权限
    • 将到 80 端口的请求转发到 8080 端口上

      iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
      iptables -t nat -I PREROUTING -d 192.168.0.2 -p tcp --dport 80 -j DNAT --to 192.168.0.2:8080
      

    由于只需要改端口,第二条命令也可以使用

    iptables -t nat -I PREROUTING -d 192.168.0.2 -p tcp --dport 80 -j REDIRECT --to-ports 8080
    

    HTTPS 服务配置

    与 HTTP 同理,HTTPS 需要打开 8443 端口,并将 443 端口的请求转发到 8443 端口上

    iptables -I INPUT -p tcp --dport 8443 -j ACCEPT
    iptables -t nat -I PREROUTING -d 192.168.0.2 -p tcp --dport 443 -j DNAT --to 192.168.0.2:8443
    

    连接限制

    限制客户端并发连接数

    iptables -I INPUT -p tcp --syn --dport 8080 -m connlimit --connlimit-above 2 -j REJECT
    

    上述规则,限制同一个 IP 建立两个以上的 TCP 连接

    流量控制

    iptables -I INPUT -p icmp -m limit --limit 10/m --limit-burst 10 -j REJECT
    

    上述规则,当超过 10 个 icmp 包后,没分钟只接受 10 个 icmp 包,其它全部拒绝

    禁止访问域名

    禁止访问 baidu

    iptables -I OUTPUT -m string --algo kmp --string "baidu" -j REJECT
    

    使用效果

    [root@AlexWoo-CentOS ~]# curl http://www.baidu.com
    curl: (6) Couldn't resolve host 'www.baidu.com'
    
    展开全文
  • 扩展GridView控件(增加多个常用功能)
  • Unity常用脚本类继承关系

    千次阅读 2017-05-06 16:51:10
    本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结。博文首发地址:http://blog.csdn.net/duzixiUnity常用脚本类继承关系图 对Unity开发稍有了解的朋友都知道,在Unity开发框架中有4基本层次:工程...
  • 字符串常用的一些功能方法

    千次阅读 2021-04-11 17:12:16
    字符串常用的一些功能方法 // 字符串初始化 String var1 = "Think in Java"; // 查找字符串在s1中的位置。如果s1不包含,则返回-1;如果有多,则返回第一匹配位置(从后往前) int var2 = var1.indexOf("Java")...
  • Java数据结构Map的常用功能

    千次阅读 2020-11-09 09:39:44
    常用功能 添加功能: map.put(key,value); //添加元素或者修改value的值 删除功能 map.remove(key); 根据key的值删除对应value并且返回value map.clear(); 清除所有的对应关系 判断功能 map.isEmpty(); 判断是否...
  • idea的常用功能

    千次阅读 2018-05-15 10:09:36
    一,搜素快捷键1.Ctrl+N搜素类,相当于eclipse的ctrl+shift+R2.Ctrl+Shift+N 搜索所有文件,包含类,xml,js,web 等3.Ctrl+H 查看类的继承关系,例如String的父类是Object4.Ctrl+Alt+B 查看子类方法实现,方便查看...
  • RGEOS GIS常用算法,希望提供基本空间几何对象定义、空间量算、空间拓扑操作、空间拓扑关系和空间分析算法的搜集和整理, 同时提供一几何图形绘制功能用来显示相关算法的结果。
  • IntelliJ IDEA常用功能介绍

    千次阅读 2018-07-22 11:54:18
    intellij idea是一款智能,功能强大的ide,对比eclipse或myeclipse,它的搜索功能速度要快得多。 它有多种搜索方式,我将为根据常用内容进行介绍。 1、全局搜索介绍 1.1、按照类名搜索快捷键(Ctrl+N),其中可以...
  • Unity常用脚本类的继承关系

    千次阅读 2016-04-24 20:04:43
    本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结。 转载地址:http://blog.csdn.net/duzixi Unity常用脚本类继承关系图 对Unity开发稍有了解的朋友都知道,在Unity开发框架中有
  • 客户关系管理客户关系管理系统主要特点分类以及常用CRM软件介绍上客户关系管理系统的宗旨是为了满足每客户的特殊需求同每客户建立联系通过同客户的联系来了解客户的不同需求并在此基础上进行"一对一"个性化服务...
  • MySQL数据库界面化工具 - Navicat的常用功能

    千次阅读 多人点赞 2020-04-28 19:25:49
    本文关键字:MySQL、数据库、界面化工具、Navicat、常用功能。本文使用的工具版本为:Navicat Premium 15,文中提到的功能在旧版中同样支持,如果需要最新版的软件(Mac/Windows)可私信博主。
  • 学习Unity开发引擎的初学者会接触大量的脚本类,而这些类之间的关系往往容易被忽略。 本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结。(详见Unity常用脚本类继承关系图)
  • 关系数据库常用名词及解释

    千次阅读 2012-08-24 09:30:11
    关系数据库常用名词及解释 1、键码(Key):它是关系模型中的一重要概念,在关系中用来标识行的一列或多列。 2、候选关键字(Candidate Key):它是唯一地标识表中的一行而又不含多余属性的一属性集,...
  • Pythton相关各软件关系总结Python、anaconda、常用IDE的安装、使用、关系PythonAnaconda常用IDE小结推荐出装 Python、anaconda、常用IDE的安装、使用、关系 最开始接触python的时候,我只知道有python2和python3的...
  • Lemon OA第4篇:常用功能

    千次阅读 2015-06-07 09:03:56
    OA,Office Automation的简写,中文意思...OA除了核心的一些功能之外,还需具备一些常用功能。第3篇:核心功能已经介绍了Lemon OA的核心功能,但是并不代表OA全部的核心功能,因为OA是一很大的领域,不同行业的OA侧
  • 很多新手申请下公众号之后,被微信公众号后台繁复的各种功能弄的晕头转向,很多...功能列表里包含了群发、自动回复、自定义菜单这类常用功能,还可以扩展一些功能插件。这里就出现了第一非常重要的功能,每天发文都
  • 常用的各种网络协议概念关系整理

    千次阅读 2017-08-28 22:47:58
    包括各种协议之间的关系。0x01 TCP/IP协议TCP/IP协议是一协议簇。里面包括很多协议的。包括UDP,TCP,IP协议。TCP/IP协议集包括应用层,传输层,网络层,网络访问层。应用层 超文本传输协议(HTTP):万维网的基本协议....
  • 【Navicat】快捷键和常用功能

    万次阅读 热门讨论 2018-04-23 15:30:32
    Ctrl + O 在查询界面,选中一行SQL语句 鼠标三击当前行(很多地方通用) 刷新 F5(很多地方通用) 另一种注释方式 # 常用功能 有时按快捷键Ctrl + F搜某条数据时搜不到,但是能用SQL语句查询出来。这是因为Ctrl + F...
  • UML常用图的几种关系的总结

    千次阅读 2017-09-08 11:08:46
    在UML的 类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合...【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定
  • 关系抽取常用的数据集和工具

    万次阅读 2018-05-03 21:20:17
    参考文献:张春云. 实体关系抽取算法研究[D]. 北京邮电大学, 2015. 数据集: 1.MUC关系抽取任务数据集 MUC-7的五大评测任务分别是命名实体识别...MUC会议停开后,ACE将关系抽取任务作为一子任务从2002至2007年...
  • Blender常用快捷键功能和学习笔记

    千次阅读 2012-03-05 11:53:03
    Blender常用快捷键功能和学习笔记 http://www.metalstar.net  Johnny 孙 这里记录着我学习Blender过程中的一些问题和心得,免得自己忘了,也希望对和我一样的初学者有所帮助。 感谢BlenderCN主群的朋友们的...
  • AngularJs(二)设计思想和常用功能

    千次阅读 2016-05-23 19:03:02
    2. AngularJs设计思想和常用功能 本章将会简单介绍AngularJS的一些常用功能,让读者明白不同的应用场景应该使用Angular的哪些功能。以及阐述AngularJS的设计思想,避免开发者陷入某些误区。   2.1. 调用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 600,785
精华内容 240,314
关键字:

常用的六个功能关系