sendip 包下载以及介绍

回复 收藏
已邀请:
0

阿铭 管理员

赞同来自:

SENDIP 可以发送NTP, BGP, RIP, RIPng, TCP, UDP, ICMP、IPv4 和IPv6 等各种格式的数据包,SENDIP 本身是以模块的方式发送各种协议的数据包,用-p 参数指定协议类型,要发送每种协议的数据包, 必须对该协议的数据包格式有一定的了解。通常发送TCP/UDP/ICMP 数据包时,都必须以IP 包进行封装,然后才可以发出去。本节我们将以TCP数据包为例进行讲述。
下面介绍一下SENDIP 的命令行格式,以下为直接执行SENDIP 时的输出:
Usage: sendip [-v] [-d data] [-h] [-f datafile] [-p module] [module options]hostname
-d data add this data as a string to the end of the packet
Data can be:
rN to generate N random(ish) data bytes;
0x or 0X followed by hex digits;
0 followed by octal digits;
any other stream of bytes(以指定字节的随机数据填充包中的数据段)
-f datafile read packet data from file(以指定数据文件中的内容填充包中的数据段)
-h print this message(输出帮助信息)
-p module load the specified module (see below)(指定协议类型)
-v be verbose(运行时输出详细运行信息,如不指定,运行时不输出信息)
(协议类型是以模块的方式指定的,用-p 参数指定)
Modules are loaded in the order the -p option appears. The headers from each module are put immediately inside the headers from the previos model in the final packet. For example, to embed bgp inside tcp inside ipv4, do sendip -p ipv4 -p tcp -p bgp ....
Modules available at compile time:
ipv4 ipv6 icmp tcp udp bgp rip ntp(支持的协议类型)
通常执行格式如下:
#sendip –v –d r64 –p ipv4 –iv 4 –ih 5 –il 128 –is 10.0.0.1 –id 30.0.0.1 –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-v:运行时输出详细运行信息,如不指定,运行时不输出信息
–d r64:用64 字节的随机数值填充IP 包中的数据段
–p ipv4:指定协议类型为IP 协议(IP 协议有自己的相应参数,以i 开头)
–iv 4:协议版本为4,即IPV4
–ih 5:指定IP 头的长度为5×4=20 字节
–il 128:指定IP 包的总长度为128 字节
–is 10.0.0.1:指定IP 包的源地址
–id 30.0.0.1:指定IP 包的目的地址
–p tcp:指定IP 包中封装的包的协议类型(TCP 协议有自己的相应参数,以t 开头)
–ts 1379:指定TCP 包的源端口1379
–td 23:指定TCP 包的目的端口为23
-tt 8:指定TCP 包的偏移量即TCP 头的长度,没有TCP 选项时为5,即20 字节,有TCP 选项时需要增加。
30.0.0.1:指定发包的目的主机
以上部分为利用SENDIP 发送一个简单的TCP 数据包的方法,下面结合IP 和TCP 数据包的格式详细介绍IP 和TCP 协议的各种参数。
具体各种协议的数据包格式可参考TCP/IP 协议中对各种协议数据包格式的介绍,下面我们只介绍IP 数据包的格式和TCP 数据包的格式:
IP 数据包的格式:
根据IP 数据包的格式,SENDIP 有如下命令行参数可以指定对应的IP 数据包中参数的值。
Field name
Size
(bits)
SendIP
option
Description
Version 4 -iv Always 4(对应“4 位版本”,通常值为4,表示IPV4)
Header length 4 -ih
IP header length, measured in 32bit words, 5 if there are no options(对应“4 位首部长度”,表示以32 位即4字节为单位的IP 首部长度,如果没有IP 参数的话,通常为5,表示首部长度为20 字节,如有IP 参数的话,需要调整该值)
Type of Service/Differentiated Services 8 -iy
服务类型(TOS)字段由8 位组成,其中包括3 位的优先权字段(现已被忽略)、4 位的TOS 子字段和1
位未用位但必须置0,4 位TOS 子字段分别代表最小时延、最大吞吐量、最高可靠性和最小费用。4 位只
能置其中1 位,使用时只要将设置相应位后运算出十进制值即可。如要设置最大吞吐量位(00001000),只
需添加参数iy 8 即可。
Total Length 16 -il
Total length of IP packet including header and data,measured in octets(指定IP 包的总长度,包括IP 头部分和数据部分,以8 位字节为单位,最长为65535)
Identification 16 -ii
Used to help reassembled fragmented packets(指定IP包的标识号,用来帮助重新组装分段的IP 包)
-ifr 1 bit: reserved, should be 0
-ifd 1 bit: don't fragment(可指定-ifd x,下可为0、1 或r) Flags 3
-ifm 1 bit: more fragmets(可指定-ifm x,下可为0、1 或r)
Fragment offset 13 -if
Where in the reconstructed datagram this fragment belongs, measured in 64bit words starting from 0(以8字节长度为单位,指定段偏移量)
Time to Live 8 -it
Number of routers the packet can pass through before being discarded(值的范围从0 到255,指定TTL,表示该包可通过的路由器的数目,用于防止包在循环路径上无休止地传递)
Protocol 8 -ip
Protocol associated with the data. See iana for an uptodate list of assigned numbers(用于定义IP 包内部封装的上层协议的协议号,如TCP 为6,可在IANA的网站上
http://www.iana.org/assignments/protocol-numbers
获得最新的协议号表)
Header checksum 16 -ic
Checksum of the IP header data (with checksum set to zero)(可指定IP 首部校验和的值,通常由SENDIP 自动生成,不指定该参数,除非要发出带有错误校验和的包)
Source Address 32 -is Duhh...(源地址,以点分十进制方式表示)
Destination Address 32 -id Cabbage(目的地址,以点分十进制方式表示)
Options Variable -io...
No options are required. Any number can be added. Seebelow for details(定义各种IP 选项,如果定义了IP选项,则前面的IP 头的长度值要包括IP 选项的长度,不带IP 选项时,该值为20,带IP 选项时,可设定该值,如果要故意制造不匹配的包,可不符合规范。)
如果有IP 选项,还可指定IP 选项的值,SENDIP 支持的IP 选项如下表所示。
Name
SendIP
option
RFC Copy Class Number
Type
(see
above)
Length
(0 not
present)
Description
EOL -ioeol 791 0 0 0 0 0
Used as padding if needed
(使用该选项后,会自动在IP 头
中未用到的位补0)
NOP -ionop 791 0 0 1 1 0
Do nothing. Often used as padding
so the next option starts on a 32 bit
boundary
RR -iorr 791 0 0 7 7 variable
Used to record the route of a
packet.(记录包走过的每个路由
器, 通常用法是: -iorr
0f:ff.ff.ff.ff:10.0.0.234 –ioeol,其中
iorr 表示记录路由,此时系统会自
动将IP 选项号置为07,0f 表示指
针,即记录的最后一个IP 地址的
指针,系统会自动运算该IP 选项
的长度)
TS -iots 791 0 2 4 68 variable
Used to record the time at which a
packet was processed by an
intermediate system
LSR -iolsr 791 1 0 3 131 vairable
Loose Source Route - let the
source specify the route for a
packet.
SID -iosid 791 1 0 8 136 4
Rarely used, carries the SATNET
stream identifier.
SSR -iossr 791 1 0 9 137 variable
Strict Source Route - same as LSR,
but extra hops are not allowed.
SEC
791,
1108
1 0 2 130 variable Security, rarely used
E-SEC 1108 1 0 5 133 variable Extended Security, rarely used
通常在SENDIP 中指定IP 选项时,格式比较特别,下面我们以RR 记录路由选项为例
介绍一下,如果要发送一个记录三个IP 的数据包,需要考虑如下,一是指定IP 头的长度要
包括IP 选项的长度,而是要指定RR 记录路由选项的指针位置和IP 地址(本来是由系统自
动记录IP 和更新指针位置,但现在必须手工指定),那么记录三个IP 包后,指针的位置应
是3+4×3+1=16,造好后,数据包的格式应该如下:
IP 头07 15 16 10.0.0.234(IP1) 20.0.0.234(IP2) 30.0.0.234(IP3) 00(ioeol) tcp
20B RR len ptr 4bytes 4bytes 4bytes Ptr
具体命令行如下:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-ih 10 表示IP 头的长度为10×4 为40 个字节,去除标准的20 个字节长度,为IP
选项预留为20 个字节
-iorr 10:10.0.0.234:20.0.0.234:30.0.0.234 中第一个10 表示用16 进制表示的指针的
位置,后面为用冒号分隔的三个用点分十进制表示的IP 地址
-ioeol 表示用00 结束IP 选项,并用随机数填充后面未用的IP 头位置
以上部分只是以RR 记录路由IP 选项为例,介绍了sendip 中指定IP 选项的方法,当然
也可以根据自己的要求发送IP 选项不符合常规的数据包。其他的IP 选项与此雷同,但发送
AntPower 版权所有© 2003 技术文章
http://www.antpower.org
第7 页共14 页
前需要详细了解IP 选项的格式,才可正确发送。

TCP 数据包的格式:
根据TCP 数据包的格式,SENDIP 有如下命令行参数可以指定对应的TCP 数据包中参
数的值。
Field name
Size
(bits)
SendIP
option
Description
Source port 16 -ts
Source port number for the connection
(以十进制的方式指定TCP 原端口)
Destination port 16 -td
Destination port number
(以十进制的方式指定TCP 目的端口)
Sequence number 32 -tn
Number of the first data octet in this packet. If SYN bit is
set, this is the number of the first data octet of the stream
too.(指定TCP 序列号,如果不指定则随机产生)
Acknowledgment
number
32 -ta
If ACK bit is set, the next sequence number the sender is
expecting to receive.
Data offset 4 -tt
Length of TCP header in 32 bit words(指定TCP 头的长
度,单位是以32bits 也就是4 字节为单位)
Reserved 4 -tr
Should be 0. Note, rfc793 defines this as a 6 bit field, but
the last 2 are used by rfc2481 for ECN as below.
Flags: ECN 1 -tfe
Flags: CWR 1 -tfc
ECN extension flags, see rfc2481. (指定TCP 标志位,
如果要打开哪一位,就在命令行参数中指定相应位的
值,如要设置SYN 状态,只需在命令行加入-tfs 1 即可

Flags: URG 1 -tfu Urgent pointer is significant(同上)
Flags: ACK 1 -tfa Acknowledgment field is significant(同上)
Flags: PSH 1 -tfp Push function(同上)
Flags: RST 1 -tfr Reset the connection(同上)
Flags: SYN 1 -tfs Synchronize sequence numbers(同上)
AntPower 版权所有© 2003 技术文章
http://www.antpower.org
第8 页共14 页
Flags: FIN 1 -tff No more data from sender(同上)
Window 16 -tw
Number of octet starting from the one in the
Acknowledgement field that the sender is willing to
accept
Checksum 16 -tc
Checksum of the TCP header (with checksum set to 0),
data, and a psuedo-header including the source and
destination IP addresses, IP protocol field and a 16 bit
length of the TCP header and data.
Urgent pointer 16 -tu
If URG bit is set, tHe offset of the last octet of urgent data
in this packet.
Options Variable -to...
No options are required. Any number can be added. See
below for details.
如果有TCP 选项,还可指定TCP 选项的值,SENDIP 支持的TCP 选项如下表所示。
Name
SendIP
option
RFC Type
Length (0
not
present)
Description
EOL -toeol 793 0 0
Used as padding if needed(用00 填充,表示TCP
选项结束,把TCP 头后面的位置用随机数填充)
NOP -tonop 793 1 0
Do nothing. Often used as padding so the next
option starts on a 32 bit boundary
MSS -tomss 793 2 4
Specify the maximum recieve segment size of the
sender as a 16 bit number. Only valid when SYN is
also set
WSOPT -towscale 1323 3 3
The window size should be leftshifted by the value
of the option (an 8 bit number). Only valid when
SYN is also set.
SACKOK -tosackok 2018 4 2
Selective Acknowledgement is permitted on this
connection
SACK -tosack 2018 5 variable
Selective Acknowledgement of non-contiguous
blocks of data. The data in the option is a series of
(left edge)-(right edge) pairs giving, respectively,
the first sequence number the has been recieved and
the first that hasn't.
TSOPT -tots 1323 8 10
Timestamp. The first 4 bytes (TSval) are the time
that the packet was sent, the remaining 4 (TSecr)
echo the TSval of a packet that was recieved. TSecr
is only valid when the ACK bit is set.
从上表所示,可以看出,TCP 选项可能只有一个单字节参数,如-toeol 和-tonop,也可
能由一个Type 号和一个length 长度以及该length 长度指定的字节数的数据组成的参数,使
用时sendip 会自动运算length 的长度,所以,不能随意设定TCP 选项的长度,但需要设定
TCP 选项的值。
AntPower 版权所有© 2003 技术文章
http://www.antpower.org
第9 页共14 页
在设定TCP 选项时,同样要考虑到TCP 头的长度要包括TCP 选项的长度。
TCP 选项数据包的格式大致如下:
Kind=3 Len=3 数据:移位数
TCP 选项号TCP 选项长度TCP 选项数据占一个字节,总长度为三个字节
具体命令行格式可参照如下格式:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 –tfa 0 –tfs 1 –towscale 0 –toeol 30.0.0.1
-towscale 0 :指设置TCP 选项3,长度为自动3,TCP 选项的值即移位数为0
-toeol :表示TCP 选项结束,后面用随机数填满TCP 头
因为用SENDIP 设定TCP 选项时,不能设定长度,所以,如果要设定长度不正确的包,
还要借助其他工具,如SNIFFER,用SNIFFER 抓到SENDIP 发送的包后,再将对应的TCP
选项的长度改为不规则的值即可。
根据前面介绍的内容,我们已经基本可以掌握用SENDIP 发送各种协议数据包的方法,
当然我们还可以利用他发送各种不符合标准的数据包,如校验和错误、长度不正确、状态位
不正确等各种我们需要的数据包,在使用时,建议与SNIFFER 搭配使用,以验证SENDIP
发出的包是否正确,进行有针对性的测试。

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: