您的位置:首页 > 其它

sendip命令详解--续

2013-02-25 18:35 127 查看
根据《TCP/IP详解》卷2第9章,并没有这个选项字段,这里应该是软件自己为了控制选项字段的长度而设计的。这里先说明一些选项字段的基础知识:
选项字段必须是4字节的整数倍,原因很简单,因为IP
header length是以4字节为一个单位元;

IP选项字段可能包含0个或多个单独选项,选项有两种类型,单字节和多字节,如下图:

sendip_图1(这里贴不上来,想办法中)
所有选项1都以字节类型(type)字段开始。在多字段选项中,类型字段后面紧接着一个长度(len)字段,其它的字节是数据(data)。许多选项数据字段的第一个字节是1字节的位移(offset)字段,指向数据字段内的某个字节。长度(len)字节的计算覆盖了类型、长度、和数据字段。类型(type)被继续分成了3个子字段:1bit备份(copied)、2bit类(class)字段和5bit数字(number)字段。
现在来看各个选贤字段的定义和使用方法。默认这个参数后的长度值总是正确的,默认没有选项字段。
-ioeol IP option: end of
list
1字节,表示选项表的结尾,就是一个选项字段的结束标识符。
-ionop IP option: no-op
1字节,没有任何意义,表示无操作,碰到这个字段可以忽略。
-iorr x
长度可变,作用是记录路由。格式是pointer:addr1:addr2,这里的pointer其实就是一个具体的offset值,是一个十六进制的值,我测试最小值是十进制的10(这里只能用十进制表示,10刚好对应的是0x16)。使用可以参照这个命令行:
[root@FC5 ~]# sendip -v -p ipv4 -is
192.168.96.111 -id 192.168.96.202 -iorr 10:192.168.96.1
192.168.96.202 -d asf

这里要说明一点为什么要加一个asf的3个字节的数据字段,因为在测试的时候,我在被发送报文的pc端抓包发现如果ethereal分析显示total
length这个值不对的话,它就不会分析其它字段,这样会导致不能清楚看到option字段,不知道是不是正确构造了报文,所以在构造报文时还需要注意这个小窍门,ethereal分析后还少几个字节就加几个字符。这样你就可以看到你刚才发送的option字段里的内容了。
-iots x
长度可变,作用是时戳。格式是pointer:overflow:flag:(ip1:)ts1:(ip2:)ts2,pointer表示位偏移,overflow表示??,flag是标识位(0表示记录时间戳、1表示记录地址和时间戳、3表示只在预先指定的系统记录时间戳,其它保留)。注意只有flag位置1时才有ip1、ip2的参数。
[root@FC5 ~]# sendip -v -p ipv4 -is
192.168.96.222 -iots 11:4:1:192.168.96.1:11:
192.168.9.8:90
192.168.96.202
11是位偏移,4表示??,1表示记录地址和时间戳,后面就是一个ip对应一个时间戳。
构造这样的报文主要可以用于测试DUT是不是检查option字段,如果检查,是不是检查时间戳等信息。
-iolsr x
长度可变,表示宽松源路由和记录路由(LSRR)。格式很简单了,上面ping的实例如果运行后抓包看过以后,就发现这个是按照标准的格式来定义的。
[root@FC5 ~]# sendip -v -p ipv4 -is
192.168.96.253 -iolsr 10:192.168.96.1 192.168.96.202 -d
1
-iosid x
4个字节,构造identifier(标识符),取值范围0-65535,超过该范围自动变为0。我测试的结果显示前2个字节总是0x8804,后面2个字节就是输入的参数值。
-iossr x
长度可变,表示严格源路由和记录路由(SSRR),格式同-iolsr。
<h2>TCP报文的构造</h2>

先看man文件中显示支持可以构造的TCP报文字段有哪些,然后在参数后直接说明该字段的含义。构造报文首先要求对报文的各个字段非常熟悉,所以先看一下TCP首部的图表:
TCP首部:
0 15 16
31






































16位源端口号
16位目的端口号
32位序列号
32位确认号
4位
首部
长度
6位
保留
U
R
G
ACK
P
S
H
RST
SYN
FIN
16位窗口大小
16位TCP检验和
16位紧急指针
选项(若有)
数据(若有)
sendip_表2
Arguments for module
./tcp.so:
-ts x TCP source port
构造TCP的源端口,默认为0。
-td x TCP destination
port
构造TCP的目的端口,默认为0。
-tn x TCP sequence
number
构造TCP的序列号,默认为随机。
-ta x TCP ack number
构造TCP的应答号,默认为0。
-tt x TCP data offset
构造TCP的首部长度,默认是正确值,标准是20字节,最大60字节。
-tr x TCP header reserved field
EXCLUDING ECN and CWR bits
TCP头部保留位。
-tfe x TCP ECN(Explicit Congestion
Notification)bit (rfc2481)
TCP标志位中保留的ECN字段,默认为0,选项为0、1或r。
-tfc x TCP CWR(Congestion Window
Reduced)bit (rfc2481)
TCP标志位中保留的CWR字段,默认为0,选项为0、1或r。
注意:ECN和CWR
-tfu x TCP URG bit
构造TCP标志位中的URG,表示紧急指针有效。当紧急指针(Urgent
Pointer)字段有内容时有效。默认为0,选项为0、1或r。
-tfa x TCP ACK bit
构造TCP标志位中的ACK,表示确认ack
number有效。默认为0,选项为0、1或r。
-tfp x TCP PSH bit
构造TCP标志位中的PSH,表示接收方应该尽快将这个报文段交给应用层。默认为0,选项为0、1或r。
-tfr x TCP RST bit
构造TCP标志位中的RST,表示需要重建连接,断开目前的连接。默认为0,选项为0、1或r。
-tfs x TCP SYN bit
构造TCP标志位中的SYN,表示使用同步序号用来发起一个连接。默认为1,选项为0、1或r。
-tff x TCP FIN bit
构造TCP标志位中的FIN,表示完成了发送任务。默认为0,选项为0、1或r。
-tw x TCP window size
构造TCP的期望接收的窗口大小值,默认为65535字节。
-tc x TCP checksum
构造TCP的checksum,检验和覆盖了整个TCP的报文段。默认为正确值。可以用于测试DUT设备是不是检验TCP报文的checksum值。
-tu x TCP urgent pointer
构造紧急指针,所谓紧急指针是一个正的位偏移量,和序号字段中的值相加可以得出紧急数据最后一个字节的序号。默认配置为0。注意这个值只有在-tfu置1时才有效,默认情况下如果有-tu参数,-tfu会自动为1,但是强制把-tfu置为1的话会导致-tu的参数无效。
-tonum x
TCP option as string of hex bytes
(length is always correct)
选项字段的长度,但是标准字段没有这个选项。默认是没有选项字段的内容。
-toeol TCP option: end of
list
选项字段结束的标识符。
-tonop TCP option: no op
没有任何意义,表示无操作,碰到这个字段可以忽略。
-tomss x
表示最长报文大小,每个连接方通常都在通信的第一个报文段中指明这个选项。
-towscale x
TCP option: window scale
(rfc1323)
-tosackok
TCP option: allow selective ack
(rfc2018)
-tosack x
TCP option: selective ack (rfc2018),
format is l_edge1:r_edge1,l_edge2:r_edge2...
-tots x
TCP option: timestamp (rfc1323),
format is tsval:tsecr
关于一些不常见的tcp选项字段的含义,以后继续补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: