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 [old|new]

把队列中的所有数据包分成大小为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)的方式排序

print

以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 [old|new]

把队列中的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