admin管理员组

文章数量:1531662

2024年3月7日发(作者:)

isic使用说明

简单说明一下isic这个软件。刚安装的时候以为就一个isic的命令,其实i只是代表ip报文的意思,软件安装后有tcpsic、esic、icmpsic、udpsic和isic5种操作命令。所以各种命令操作主要是发送该类型的报文为主,比如isic,主要是各种ip报文,可以选择各种ip报文字段中的内容的比例,例如IP协议版本、选项字段等。注意所有发送报文的速率跟网卡有关,我们不能控制发送报文的速率。文档内容将以帮助文件为主,结合一两个实际的命令来解释各个命令参数的作用。

1. tcpsic

usage: tcpsic [-v] [-D] -s [,port] -d [,port]

[-r seed] [-m ]

[-p ] [-k ] [-x ]

参数含义:

-v:显示版本号,没有多大意义,不需要配置。

-D:Debug模式,会把具体的报文内容都打印出来,一般情况下不使用,在需要确定是否有报文发出的情况下可以使用。

-s:配置源ip和端口,可以不设置端口,设置时ip和端口号中间用逗号“,”连接,ip可以用随机的ip来代替,参数是rand。

-d:配置目的ip和端口,可以不设置端口,设置时ip和端口号中间用逗号“,”连接,ip同样可以设置rand,但是运行后会报错“Failed to send packet: Invalid argument”,所以目的ip一定要设置。

-r:配置发送报文的编号,其实是一个rand这个函数一个参数,如果参数固定,那么构造报文的类型就固定了。就是说你可以固定的总是发送这一个编号的报文,如果测试中确认这个编号的报文会影响到设备,就记住这个seed编号,就可以节省构造报文的时间。这个编号在发送报文之前和完毕后都会打印出来。

-m:平均发送报文大小的最大值。200以上的参数值有效,单位kB。

-p:平均发送报文的个数,注意这个不是总数,总数需要和-x 这个参数一起决定。这里的Crazyfrog 第 1 页 2007-1-19

发送的个数是指发送多少个不一样的包,包的内容不一样。不带该参数表示连续不断的发送。

-k:忽略的报文个数,就是指不发送多少个报文,这里的报文是参数-p后的报文内容。

-x: 重复发送同一个报文x次。这里的报文就是-p参数后的报文内容。

注:-p、-k、-x三个参数决定了总计发送了多少个报文,假设总计报文个数为N,那么存在这样一个表达式:N=(p-k)*x。也就是说k一定要小于p,不然就没有报文发出,建议不要配置k参数。

Percentage Opts: [-F frags] [-V ] [-I ]

[-T ] [-u ] [-t ]

百分比的参数配置:

-F: 发送需要分片报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-V: 发送错误IP版本号的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。控制不是很精确。

-I:发送含有IP选项字段的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-T: 发送含有TCP选项字段的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-u: 发送TCP的flag中urgent标志位置1的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-t: 发送TCP的checksum中错误的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。控制不是很精确。

注:这里的参数和参数值是针对各自的协议报文一个总的统计,在命令输入后就会有一个统计值输出,比如:-T的参数值为50,那么发送的所有TCP报文中有一半含有option字段,而IP报文不在统计之列。

ex: -s 10.10.10.10,23 -d 10.10.10.100 -I 100

will give a 100% chance of IP Options ^^^

向10.10.10.100这个地址持续不断的发送源地址为10.10.10.10,源端口为23,目的端口随机,每个IP数据包文都含有选项字段的报文。

ex: -s 10.10.10.10,23 -d 10.10.10.100 -p 100 -r 103334

向10.10.10.100这个地址发送100个源地址为10.10.10.10,源端口为23,目的端口随机,Crazyfrog 第 2 页 2007-1-19

报文内容的seed编号为103334的报文。

2. esic

usage: esic -i interface [-s ] [-d ]

[-p or 'rand'>] [-r ]

[-c <# of pkts to send>] [-l ]

[-m <# of pkts between printout>]

参数含义:

-i: 指定发送的接口,必须的参数,因为没有配置ip,发送的报文不知道从哪个接口送出,而且配置了接口后就可以使用了。注意:这个时候的目的地址是ff:ff:ff:ff:ff:ff,可以使用-D参数来查看,显然这样的配置导致的结果就是全网的广播风暴。

- Be careful, the source MAC defaults to your interface

and the dest MAC defaults to broadcast

这里就是说明默认的配置,源MAC为PC接口的MAC,目的MAC为广播地址。

-s: 配置源MAC地址,可以配置随机参数值rand。

-d:配置目的MAC地址,可以配置随机参数值rand。

注:它对MAC的判断不是很严格,中间用“:”或“-”连接都是正确的,不连接也可以,但是它只认后两位,例如“aabb”或“aa bb”,它会认为是“bb:00:00:00:00:00”这个MAC地址。

-p: 配置发送的协议类型编号,但是选择该参数后发包的proto是一个你配置的编号,但是它的编号和protocol的协议编号不是对应的。默认发送的是IP协议类型的数据包。

-r:配置发送报文的编号,就是说你可以固定的总是发送这一个编号的报文,如果测试中确认这个编号的报文会影响到设备,就记住这个seed编号,就可以节省构造报文的时间。这个编号在发送前会打印出来。

-c: 配置发送报文的总个数。

-l: 配置发送报文的最大长度,发送的报文length在这个参数值以内。

-m: 配置打印信息的间隔,例如-m 100表示每发送100个报文后打印一次统计信息。

examples:

esic -i eth0 -d 02:de:ad:be:ef:40 -r123 -c10000

Crazyfrog 第 3 页 2007-1-19

从eth0口发出10000个seed编号123内容,目的MAC为02:de:ad:be:ef:40的报文。默认的源MAC为接口MAC地址。

3. icmpsic

usage: icmpsic [-v] [-D] -s [,port] -d [,port]

[-r seed] [-m ]

[-p ] [-k ] [-x ]

参数含义:

-v:显示版本号,没有多大意义,不需要配置。

-D:Debug模式,会把具体的报文内容都打印出来,一般情况下不使用,在需要确定是否有报文发出的情况下可以使用。

-s:配置源ip,注意ICMP没有端口的概念,所以如果配置了端口就会报错,这里的命令提示是有错误的。ip可以用随机的ip来代替,参数是rand。

-d:配置目的ip,注意ICMP没有端口的概念,所以如果配置了端口就会报错,这里的命令提示是有错误的。ip可以用随机的ip来代替,参数是rand。

-r:配置发送报文的编号,就是说你可以固定的总是发送这一个编号的报文,如果测试中确认这个编号的报文会影响到设备,就记住这个seed编号,就可以节省构造报文的时间。这个编号在发送前会打印出来。

-m:平均发送报文大小的最大值。从试验来看这个参数无效,大小是随机的,没有受这个参数的控制。

-p:平均发送报文的个数,注意这个不是总数,总数需要和-x 这个参数一起决定。这里的发送的个数是指发送多少个不一样的包,包的内容不一样。不带该参数表示连续不断的发送。

-k:忽略的报文个数,就是指不发送多少个报文,这里的报文是参数-p后的报文内容。

-x:重复发送同一个报文x次。这里的报文就是-p参数后的报文。

注:-p、-k、-x三个参数决定了总计发送了多少个报文,假设总计报文个数为N,那么存在这样一个表达式:N=(p-k)*x。也就是说k一定要小于p,不然就没有报文发出,建议不要配置k参数。

Percentage Opts: [-F frags] [-V ] [-I ]

[-i ]

百分比的参数配置:

Crazyfrog 第 4 页 2007-1-19

-F: 发送需要分片报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-V: 发送错误IP版本号的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-I:发送含有IP选项字段的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-i: 发送ICMP的checksum中错误的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。控制不是很精确。

ex: -s 10.10.10.10,23 -d 10.10.10.100 -I 100

这个实例实际上是错误的,照搬了tcpsic的实例,端口是不能被添加的。剩下的就不说了,我举几个实例说明一下。

icmpsic -s 192.168.96.10 -d 192.168.96.201 -p 10 -F 1000 -I 100 -V 100 -i 100

构造源地址为192.168.96.10(-s)的10个(-p)icmp报文(icmpsic),所有的报文都进行分片(-F 1000),ip包头全部含有选项字段(-I 100),IP的版本号全部错误(-V 100),并且所有的报文checksum都是错误的(-i),将这样的报文发向192.168.96.201(-d)这个ip地址。这样的报文如果穿过了一个转发设备的话,所有的报文应该都会被丢弃。

命令执行的过程:

[root@FC5 ~]# icmpsic -s 192.168.96.10 -d 192.168.96.201 -p 10 -F 1000 -I 100 -V 100 -i 100

Compiled against Libnet 1.1.2.1

Installing Signal Handlers.

Seeding with 2445

No Maximum traffic limiter

Bad IP Version = 100% IP Opts Pcnt = 100%

Frag'd Pcnt = 1000% Bad ICMP Cksm = 100%

Wrote 10 packets in 0.00s @ 2999.40 pkts/s

Crazyfrog

第 5 页 2007-1-19

4. udpsic

usage: udpsic [-v] [-D] -s [,port] -d [,port]

[-r seed] [-m ]

[-p ] [-k ] [-x ]

参数含义:

-v:显示版本号,没有多大意义,不需要配置。

-D:Debug模式,会把具体的报文内容都打印出来,一般情况下不使用,在需要确定是否有报文发出的情况下可以使用。

-s:配置源ip和端口,可以不设置端口,设置时ip和端口号中间用逗号“,”连接,ip可以用随机的ip来代替,参数是rand。

-d:配置目的ip和端口,可以不设置端口,设置时ip和端口号中间用逗号“,”连接,ip同样可以设置rand,但是运行后会报错“Failed to send packet: Invalid argument”,所以目的ip一定要设置。

-r:配置发送报文的编号,就是说你可以固定的总是发送这一个编号的报文,如果测试中确认这个编号的报文会影响到设备,就记住这个seed编号,就可以节省构造报文的时间。这个编号在发送前会打印出来。

-m:平均发送报文大小的最大值。200以上的参数值有效,单位kB。

-p:平均发送报文的个数,注意这个不是总数,总数需要和-x 这个参数一起决定。这里的发送的个数是指发送多少个不一样的包,包的内容不一样。不带该参数表示连续不断的发送。

Percentage Opts: [-F frags] [-V ] [-I ]

[-U ]

百分比的参数配置:

-F: 发送需要分片报文的百分比,可以直接输入数字或百分数,例如50=50%,也可-k:忽略的报文个数,就是指不发送多少个报文,这里的报文是参数-p后的报文内容。

-x: 重复发送同一个报文x次。这里的报文就是-p参数后的报文内容。

以大于100,不会报错,命令可以执行。

-V: 发送错误IP版本号的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。控制不是很精确。

-I:发送含有IP选项字段的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

Crazyfrog 第 6 页 2007-1-19

-U: 发送checksum错误的UDP报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

配置实例:

udpsic -s 192.168.96.10,10 -d 192.168.96.202,80 -p 100 -U 10 -V 0 -F 0 -I 0

构造源地址为192.168.96.10源端口为10(-s)的,checksun有10%(-U)为错误的,没有分片(-F)和ip选项(-I),正确协议(-V)类型的10个(-p)udp报文(udpsic)发送给目的地址为192.168.96.202目的端口为80(-d)的主机。

这个实例可以检验DUT设备是否对分片、协议类型错误、checksum错误等是否进行检测。

命令执行的过程:

[root@FC5 ~]# udpsic -s 192.168.96.10,10 -d 192.168.96.202,80 -p 100 -U 10 -V 0 -F 0 -I 0

Compiled against Libnet 1.1.2.1

Installing Signal Handlers.

Seeding with 2475

No Maximum traffic limiter

Bad IP Version = 0% IP Opts Pcnt = 0%

Frag'd Pcnt = 0% Bad UDP Cksm = 10%

Wrote 100 packets in 0.01s @ 15835.31 pkts/s

Crazyfrog 第 7 页 2007-1-19

5. isic

usage: isic [-v] [-D] -s -d

[-p ] [-k ] [-x ]

[-r ] [-m ]

参数含义:

-v:显示版本号,没有多大意义,不需要配置。

-D:Debug模式,会把具体的报文内容都打印出来,一般情况下不使用,在需要确定是否有报文发出的情况下可以使用。

-s:配置源ip,ip可以用随机的ip来代替,参数是rand。

-d:配置目的ip, ip同样可以设置rand。

-r:配置发送报文的编号,就是说你可以固定的总是发送这一个编号的报文,如果测试中确认这个编号的报文会影响到设备,就记住这个seed编号,就可以节省构造报文的时间。这个编号在发送前会打印出来。

-m:平均发送报文大小的最大值。200以上的参数值有效,单位kB。

-p:平均发送报文的个数,注意这个不是总数,总数需要和-x 这个参数一起决定。这里的发送的个数是指发送多少个不一样的包,包的内容不一样。不带该参数表示连续不断的发送。

-k:忽略的报文个数,就是指不发送多少个报文,这里的报文是参数-p后的报文内容。

-x: 重复发送同一个报文x次。这里的报文就是-p参数后的报文内容。

Percentage Opts: [-F frags] [-V ]

[-I ]

百分比的参数配置:

-F: 发送需要分片报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。

-V: 发送错误IP版本号的报文的百分比,可以直接输入数字或百分数,例如50=50%,也可以大于100,不会报错,命令可以执行。控制不是很精确。

-I: 发送IP报文的头部使用随机的长度的报文的百分比。

配置实例:

isic -s 192.168.96.10 -d 192.168.96.202 -p 10 -I 100

-I表示所发送的IP报文都使用随机的Header length,其它的就不多罗嗦了。

Crazyfrog 第 8 页 2007-1-19

使用小结:

isic这个工具主要是测试DUT对非正常报文的处理情况,有的设备检测五元组,有的还检测checksum,有的还检测tcp的序列号,所以使用isic这个工具可以构造我们所需要的正常或非正常报文,来检测DUT对报文内容的检测深度和处理的速度。而且它自身的统计功能可以很好的为测试服务,提高了测试的精度。

isic工作原理

刚开始使用发包工具的时候会觉得这个东西很神奇,可以构造出这么多不同的报文,还可以控制一些参数来发送自己想要发送的报文,但是看过源码文件以后,也许就没有这么神秘了。

以isic-0.06来说,先看看解压tar包后的文件内容:

isic_图1

安装过程就不多说了,看其中一个c文件就可以知道它的报文是怎样构造的了,以isic.c为例,看其中一部分内容。

isic_图2

可以学习到isic的含义:ISIC - IP Stack Integrity Checker,就是IP协议栈完整性检测的意思。

Crazyfrog 第 9 页 2007-1-19

isic_图3

可以看到main函数中定义了默认的参数值,例如默认的分片的比例值,默认发送的次数,最大的发包速率等信息,很显然isic是依靠对应的c文件去构造报文的。构造完毕后经由网卡发送出去。

Crazyfrog 第 10 页 2007-1-19

本文标签: 报文发送参数编号配置