IP包构造工具
sendip -v -d r64 -p ipv4 -iv 4 -ih 5 -il 128 -is 1.1.1.4 -id 1.1.1.1 -p tcp -ts 9999 -td 8888 -tt 8 1.1.1.1
参数说明:
-v: 详细模式,即打印出你发送报文的内容,类似于debug模式,建议配置该参数,可以清楚的看到发送的报文内容是否正确。
-d: 添加data字段的内容,有option字段的话放在options字段之后,任意添加。也可以一次用文件导入,不过参数是下面的-f。
-h: 显示上面的帮助文件。
-f: 在data字段添加参数后所指的文件里的内容,参数后跟的内容就是一个文件名。
-p: 指定发送报文的类型,选项就是帮助提示中的ipv4 ipv6 icmp tcp udp bgp rip ntp的8种类型,注意各个协议之间的搭配使用,例如ntp是用udp传输,而rip是用tcp传输。这个参数可以复用来更加精确的确定一个报文的类型和各个字段,例如:-p ipv4 –p tcp –p rip是可以一起用的。该参数必须配置。
hostname: 直接输入ip地址即可,也可以是主机名,但是之前要把主机名和对应的ip写入到/etc/hosts的文件中。该参数必须配置。注意不需要输入hostname这个字段,要不是ip,要不是主机名。
配置完以上参数后就可以发送报文了,但是具体报文的各个字段都是default配置,并没有达到自己要构造报文的目的。下面以ipv4、udp、tcp、icmp为例根据man文件的内容来说明各个字段的构造方法,ipv6、rip、bgp和ntp希望后面有时间再补充。
-iv x IP version (you almost definately don’t want to change this)
构造IP版本,这个可以任意,0到15任意选择,超过15发出的报文IP version为0。默认为4。
-ih x IP header length (see README)
构造header(首部)长度,这里所指的是32-bit的word的个数,就是以4个字节为单位元,你定义的结果要乘以4,要求最小为5(5x4=20bytes),最大为15(15x4=60bytes)。如果构造首部不是20bytes的报文,网卡收到的时候ethereal只解析到mac地址,它不认为是一个完整的IP报文。默认是20字节。
-il x Total IP packet length (see README)
构造IP报文的总长度,这里的总长度是包括数据字段的,就是说如果没有数据字段,这里的值应该和首部长度字段的值是一样的。最大值为65535(二进制16个1),但是注意配置这个值的意义不大,用ethereal抓到这个报文时显示的值还是一个正确的值,这个报文本来有多大就是多大。默认是根据报文内容来确定,是一个正确的值。
-is x Source IP address (see README)
构造源IP地址,任意构造。判断不是很严格,可以输入错误,它会自动补充或用255.255.255.255来代替,例如输入1.1.则用255.255.255.255来代替;如果输入1.1则会自动补齐中间的两位,显示为1.0.0.1;如果输入1.1.1则会自动填充为1.1.0.1。目的IP地址也是一样。源IP默认为127.0.0.1。
-id x Desitnation IP address
构造目的IP地址,这里其实可以不用写,因为hostname为一个必带的参数字段,最后的目的地址是匹配hostname参数后的内容。注意,这里的ip和hostname的内容要求一样,不然sendip发出了报文(它发出的报文目的地址是-id参数后的地址),但是id和hostname所带参数内容所指的主机的网卡并收不到报文。默认以-id后的参数为准。
-ts x TCP source port
构造TCP的源端口,默认为0。
-td x TCP destination port
构造TCP的目的端口,默认为0。
-tt x TCP data offset
构造TCP的首部长度,默认是正确值,标准是20字节,最大60字节。
其他参数说明参考
http://blog.csdn.net/stephen_yin/article/details/6575411