2.3 CommandListener中的命令

CL一共定义了11个命令,这些命令充分反映了Netd在Android系统中网络管理和控制方面的职责。本节首先介绍Linux系统中常用的三个网络管理工具,然后再分类介绍CL中的相关命令。

2.3.1 iptables、tc和ip命令

网络管理和控制一直是一项比较复杂和专业的工作,由于Linux系统中原本就有一些强大的网络管理工具,故Netd也毫不犹豫充分利用了它们。目前Netd中最依赖三个网络管控工具,即iptables、tc和ip。

1. iptables命令[7][8][9]

iptables是Linux系统中最重要的网络管控工具。它与Kernel中的netfilter模块配合工作,其主要功能是为netfilter设置一些过滤(filter)或网络地址转换(NAT)的规则。当Kernel收到网络数据包后,将会依据iptables设置的规则进行相应的操作。举个最简单的例子,可以利用iptables设置这样一条防火墙规则:丢弃来自IP地址为192.168.1.108的所有数据包。

(1)iptables原理

iptables的语法比较复杂,但工作原理较易理解。清楚iptables的前提是理解它的表(Table)、链(Chain)和规则(Rule)。三者关系如图2-10所示。

由图2-10可知:

iptables内部(其实是Kernel的netfilter模块)维护着四个Table,分别是filter、nat、mangle和raw,它们对应着不同的功能,稍后将详细介绍它们的作用。

Table中定义了Chain。一个Table可以支持多个Chain,Chain实际上是Rule的集合,每个Table都有默认的Chain。例如filter表默认的Chain有INPUT、OUTPUT、FORWARD。用户可以自定义Chain,也可修改Chain中的Rule。稍后将介绍不同Table中默认Chain方面的知识。

Rule就是iptables工作的规则。首先,系统将检查要处理的数据包是否满足Rule设置的条件,如果满足则执行Rule中设置的目标(Target),否则继续执行Chain中的下一条Rule。

由前述内容可知,iptables中的Table和Chain是理解iptables工作的关键。表2-1总结了iptables中默认Table及Chain的相关内容。

由表2-1可知,有些Table的默认Chain具有相同的名字,导致我们理解起来有些困难。为此,读者必须结合图2-11所示的iptables数据包处理流程图来理解前述内容。由图可知,不同Table和Chain在此处理流程中起着不同的作用。

(2)iptables Target和常用参数

iptables中的Rule有四个默认定义的Target,如下。

ACCEPT:接收数据包。

DROP:直接丢弃数据包。没有任何信息会反馈给数据源端。

RETURN:返回到调用Chain,略过后续的Rule处理。

QUEUE:数据返回到用户空间去处理。

提示 iptables的扩展Target还支持REJECT。相比DROP而言,REJECT会发送反馈信息给数据源端,如主机不可达之类(icmp-host-unreachable)的信息。目前只有INPUT、OUTPUT、FORWARD以及被这三个链调用的自定义链支持REJECT。

iptables有很多参数,此处先介绍一些常用参数。

-t:指定table。如果不带此参数,则默认为filter表。

-A,--append chain
rule-specification:在指定Chain的末尾添加一条Rule,rule-specification指明该Rule的内容。

-D,--delete chain
rule-specification:删除指定Chain中满足rule-specification的那条Rule。

-I,--insert chain [rule num] rule-specification:为指定Chain插入一条Rule,位置由rule
num指定。如果没有该参数,则默认加到Chain的头部。

-N:创建一条新Chain。

-L,--list:显示指定Table的Chain和Rule的信息。

Rule-specification描述该Rule的匹配条件以及目标动作,它也有一些参数来指明这些信息。

-i:指定接收数据包的网卡名,如eth0、eth1等。

-o:指定发出数据包的网卡名。

-p:指定协议,如tcp、udp等。

-s,--source address[/mask]:指定数据包的源IP地址。

-j,--jump target:跳转到指定目标,如ACCEPT、DROP等。

以前文提到的设置防火墙为例,其对应的iptables设置参数如下。

iptables -t filter -A INPUT -s 192.168.1.108 -j DROP

如果仅拦截协议为tcp的数据包,则相应参数如下。

iptables -t filter -A INPUT -p tcp -s 192.168.1.108 -j DROP

另外,iptables仅支持IPv4,如果需针对IPv6进行相应设置,则要使用ip6tables工具。

提示 iptables的用法非常灵活,如果没有长期的使用经验,将很难理解它们的真正作用。

【转载】iptables、tc和ip命令的更多相关文章

  1. ip命令和ifconfig命令(转载)

    Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  2. [转载]Vivado轻松实现IP封装

    Vivado轻松实现IP封装 1.新建一个测试工程 工程化的设计方法是离不开工程的,第一步往往都是新建工程,后面我会学习去工程化的开发方法,可能会更加高效. 2.利用向导完成IP封装 2.1.启动IP ...

  3. CentOS 7中ip命令将逐渐取代 ifconfig

    首先看下图: 要安装ip,请点击这里下载iproute2套装工具 .不过,大多数Linux发行版已经预装了iproute2工具. 你也可以使用git命令来下载最新源代码来编译: $ git clone ...

  4. dos 固定ip命令

    dos 固定ip命令 ***************************************************************************************** ...

  5. Linux下的ip命令,除了ifconfig还有很多

    linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命 ...

  6. linux包之iproute之ip命令

    [root@localhost ~]# rpm -qf /sbin/ipiproute-2.6.32-31.el6.x86_64ip 是个命令, ip 命令的功能很多!基本上它整合了 ifconfig ...

  7. [网络配置相关]——ifconfig命令、ip命令、route命令

    ifconfig命令 1. 查看已被激活的网卡的详细信息 # ifconfig eth0 Link encap:Ethernet HWaddr 00:30:67:F2:10:CF inet addr: ...

  8. linux下ip命令用法

    配置数据转发,可以通过 1.路由转发即用用路由器实现: 2.使用NAT转发: 简单的说: 路由表内的信息只是指定数据包在路由器内的下一个去处.并不能改变数据包本身的地址信息.即它只是“换条路而已,目的 ...

  9. IP命令

    ip命令是Linux下较新的功能强大的网络配置工具. 1 功能 ip命令用来显示或操纵Linux主机的路由.网络设备.策略路由和隧道. 2用法 Usage: ip [ OPTIONS ] OBJECT ...

随机推荐

  1. 【Mac + ATX基于uiautomator2】使用weditor时,报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

    产生以下原因找到了:是因为启动了appium,两者冲突,不能同时使用. 之前讲过怎么安装u2([Mac安装,ATX基于uiautomator2]之安装步骤)以及使用weditor, 但是经过一段时间, ...

  2. 什么时候触发MinorGC?什么时候触发FullGC?

    触发MinorGC(Young GC) 虚拟机在进行minorGC之前会判断老年代最大的可用连续空间是否大于新生代的所有对象总空间 1.如果大于的话,直接执行minorGC 2.如果小于,判断是否开启 ...

  3. Easyui 基于kindeditor的扩展

    源码 /** * Author : ____′↘夏悸 * Easyui KindEditor的简单扩展. * 有了这个之后,你就可以像使用Easyui组件的方式使用KindEditor了 * 前提是你 ...

  4. myeclipse中文编码错误,没有GBK选项

    默认编码是UTF-8,但是导入GBK工程后,直接改为ISO-8859-1,但是还是编码错误. 用网上的: 全局编码设置:编码设置的方法:ToolBar-->Window-->Prefere ...

  5. SourceInsight 不断无响应的有关问题

    SourceInsight 不断无响应的问题 sourceinsight3使用过程中,如果是大工程,总是出现抽筋的现象,CPU使用.内存占用都很高,阅读android源码不断出现无响应.后发现主要是因 ...

  6. #进阶系列——WebApi 身份认证解决方案:Basic基础认证

    阅读目录 一.为什么需要身份认证 二.Basic基础认证的原理解析 1.常见的认证方式 2.Basic基础认证原理 三.Basic基础认证的代码示例 1.登录过程 2./Home/Index主界面 3 ...

  7. ios 2017启动页(Launch Screen Images)、图标(App Icon)尺寸大小

    ios 2017启动页(Launch Screen Images).图标(App Icon)尺寸大小   iPhone Portrait iOS 8,9-Retina HD 5.5 (1242×220 ...

  8. 网易2016研发project师编程题

    http://www.nowcoder.com/test/970447/summary [编程题] 小易的升级之路 小易常常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a ...

  9. Cocos2d-x Lua中多场景切换生命周期

    在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期.多个场景切换时候分为几种情况:情况1,使用pushScene函数从实现GameScene场景进入SettingScen ...

  10. B. No Time for Dragons(贪心)

    B. No Time for Dragons time limit per test 2.0 s memory limit per test 256 MB input standard input o ...