fragroute使用说明
- 格式:pdf
- 大小:139.93 KB
- 文档页数:4
Fragroute使用说明
由于之前李磊同学已经做了一篇很好的ppt关于fragroute的使用,所以本文档是根据李
磊同学的ppt进行摘要,感谢李磊同学的ppt!
fragroute能够截取、修改和重写向外发送的报文,包括IP、TCP层的数据包碎片以及数据
包数据重叠技术等,它使用一个简单的配置规则来实现的外出报文的延迟(delay)、重复
(duplicate)、丢弃(drop)、分片(fragment),重叠(overlap)、分段(segment)等操作。
注意向外发送的意思是将其它应用程序发出报文,fragroute在初始化时,会删除到目标的路由
(目标不在同一个局域网中)或者ARP的相关条目(和目标在同一个局域网中);接着,把到目标的
网关设置为本地回环设备lo(127.0.0.1,在Linux下);然后,利用libpcap在本地回环设备lo
上监听,把截获的数据放到一个队列中,根据配置文件中的规则,使用上述模块对这个队列进行
操作;最后,把队列中已经处理好数据包从正确的网络接口发送出去。这就是fragroute的实现原理。
疑问:这个队列的大小是固定的,还是以一个数据包为单位?
Crazyfrog 第 1 页 2007-1-19
帮助文件说明
Usage: fragroute [-f file] dst
#fragroute -f fragroute.conf 目的ip地址
-f:必带的参数,指定配置文件的路径。fragroute的使用是根据fragroute.conf这个配
置文件来进行操作的,所有的命令参数值放在这个配置文件中,每次只需要修改配置文件即可。
fragroute本身会自带一些配置文件,供大家使用。操作时也可以把常用的配置文件放在一个目
录下以便管理和使用。
dst:必带的参数,为目的ip地址,注意直接写ip地址即可。指明发向该ip地址的报文才
进行fragroute的操作。仅支持对一个ip地址进行fragroute的命令操作。
配置完以上两个参数后就可以使用了,但是第一次使用一般会碰到这样的问题:
[root@A ~]# fragroute -f /usr/local/etc/fragroute.conf 192.168.96.1
fragroute: no route to 192.168.96.1: No such process
提示没有路由到目的ip,这个时候其实是没有学到arp的原因,你只需要先ping一下你想
要访问的目的ip,然后再执行上面的命令就可以了。
Rules:规则
delay first|last|random
把队列中的第一个(first)、最后一个(last)或者随机(random)地选择一个数据包,延迟
到ms微秒之后才投递出去。注意配置随机值时需要带具体的毫秒数值,单位可写可不写,随机
并不代表时间也随机,需要手工写入,否则提示参数无效。测试出来最大的值是705032.704ms。
drop first|last|random
模拟数据包丢失的情况,以prob%的几率丢弃队列中的第一(first)个、最后一个(last)或
者随机(random)选择数据包。例如:drop first 30(以30%的几率丢弃队列的第一个数据包),drop
last 100(总是丢弃队列的最后一个数据包)。
dup first|last|random
以prob%的几率重复队列中的第一个(first)、最后一个(last)或者随机选择一个数据包。
例如:dup first 100(在队列中复制第一个数据包的一个副本)、dup last 100(在队列中复制最
后一个数据包的一个副本)。
echo
输出字符,每有一个数据输出就会打印信息,
Crazyfrog 第 2 页 2007-1-19
ip_chaff dup|opt|
为队列中的所有数据包都制作一个负载不同(里面的数据是随机填充的)的副本。如果使用
dup选项,fragroute将延迟(延迟值是1微秒)投递数据包副本;如果使用opt选项,fragroute
会在数据包副本中设置无效的IP选项;如果使用ttl选项,fragroute就把数据包副本的TTL
值设置为较小的值。chaff这个单词本身意思是愚弄、戏弄。
ip_frag
把队列中的所有数据包分成大小为size的碎片,并在第一个碎片中包含完整的传输层包头。
这个模块还支持IP碎片重叠,有些系统是会以后到碎片的数据覆盖先到碎片的数据,对于这种
系统需要使用new选项;反之,使用old。
ip_opt lsrr|ssrr
在每个数据包中设置IP选项:松散源路由(lsrr)或者严格源路由(ssrr)。ptr最小是4,
而且必须是4的倍数。ip-addr是一系列的IP地址。
ip_ttl
把每个IP数据包的生存期设置为ttl。例如:ip_ttl 60。
ip_tos
把每个数据包的服务类型域(type-of-service)的值设置为tos,最小为0,最大为7。
order random|reverse
对队列中的数据包重新以随机(random)或者反向(reverse)的方式排序
以tcpdump的风格向标准输出设备输出队列中的所有数据包。
tcp_chaff cksum|null|paws|rexmit|seq|syn|
在队列中交错插入每个TCP报文段的副本,负载和原来的报文段不同。其中副本报文段可
以具有无效的校验和(cksum)、空的控制标志(null)、旧的时间戳选项(paws)--针对序列号回卷
保护(Protection Aginst Wrapped Sequence number,PAWS)、伪造的重传调度(rexmit)、超出窗
口范围的序列号(seq)、在TCP数据流中间的重新同步序列号的请求(syn)或者短的生存期值(ttl
是一个大于0小于256的整数)
tcp_opt mss|wscale
为每个TCP报文段添加选项,设置其最大报文段长度(0--65535)或者窗口放大因子的大小
(0--255)为size。例如:tcp_opt mss 31337、tcp_opt wscale 255。
Crazyfrog 第 3 页 2007-1-19
tcp_seg
把队列中的TCP数据分割为size大小的TCP报文段,后面两个是设置数据覆盖方式的选项,
使用这两个选项有很大的难度,因为目标系统的覆盖方式很难掌握。不过,一般情况下不管是
UNIX还是windows系统都是由新到的数据覆盖先到的数据。
注意:经过fragroute修改的数据包并不意味着所有的数据都是错误的,例如delay、drop、
dup等,它们只是有延时、丢包、重复等操作,但是应用程序是可以让它重发的,也可以等待,
选择它认为正确的报文,这个交互过程是可以完整进行的,只是进行的过程不是那么顺利。如果
在不接入DUT的情况下可以完成报文的交互,而接入DUT的情况下报文的交互过程不能正常进行
的话,就说明DUT在处理这种报文的能力上还有问题。
小结:
这篇文档主要是说明fragroute的原理和使用说明,个人感觉这款工具主要是对ip和tcp
报文的一些特定字段内容的修改和通过对报文发送顺序、丢包率、延时、是否分片的控制等手段,
来测试一个DUT对这种类型报文的处理能力。网上有一篇使用fragroute来欺骗IDS的技术文章,
介绍的内容基本上就是使用fragroute这个工具如何来填充IDS设备的数据,例如分片报文,控
制好分片的长度,让其记录但不报警;再例如添加严格路由或修改checksum字段,其实目的只
是让IDS设备记录一些无用的信息而已,并没有很高深的内容在里面。如果大家对IP和TCP的
头部几个重要的字段,以及选项字段有足够的了解,sendip、hping、fragroute这些工具使用
起来应该是得心应手滴!
Crazyfrog 第 4 页 2007-1-19