⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendip.txt

📁 可以发送各种正确和错误的包结构
💻 TXT
📖 第 1 页 / 共 2 页
字号:

三、TCP报文的构造
先看man文件中显示支持可以构造的TCP报文字段有哪些,然后在参数后直接说明该字段的含义。构造报文首先要求对报文的各个字段非常熟悉,所以先看一下TCP首部的图表:
TCP首部:
0                                   15 16                     31
16位源端口号	16位目的端口号
32位序列号
32位确认号
4位
首部
长度	6位
保留	U
R
G	ACK	P
S
H	RST	S
Y
N	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选项字段的含义,以后继续补充。
 
 
 
 
 
 
四、UDP报文的构造
先看man文件中显示支持可以构造的UDP报文字段有哪些,然后在参数后直接说明该字段的含义。构造报文首先要求对报文的各个字段非常熟悉,所以先看一下UDP首部的图表:
UDP首部:
    0                       15 16                          31
16位源端口号	16位目的端口号
16位UDP长度	16位UDP检验和
数据(若有)
sendip_表3
Arguments for module ./udp.so:
       -us x  UDP source port
    构造UDP报文的源端口,默认为0。
       -ud x  UDP destination port
    构造UDP报文的目的端口,默认为0。
-ul x  UDP packet length
    构造UDP报文的报文长度,这个值可以任意输入,测试在接收端抓包的结果显示是参数值,但是ethereal会自动分析出实际的报文长度。默认是正确的长度,8个字节。
       -uc x  UDP checksum
    构造checksum的值,覆盖了首部和数据字段。可以用于测试DUT设备是不是检验UDP报文的checksum值。这里有点需要注意,在测试的过程中,发现如果length字段不正确,网卡在收到报文后不会检查checksum,如果length是正确的,checksum才会被认出来不正确,从ethereal的抓包来看是这样的。默认是正确的checksum。
实例:
[root@FC5 ~]# sendip -v -p ipv4 -is 192.168.96.7 -id 192.168.96.1 -p udp -us 8000 -ud 4000 192.168.96.1 –d asdfasdf
    发送一个源地址为192.168.96.7,源端口为8000的udp包,到目的为192.168.96.1,目的端口为4000设备上,数据包的内容是asdfasdf,如果要直接引用一个文件的内容的话可以使用-f参数,后面写文件的路径即可。

  
五、ICMP报文的构造
先看man文件中显示支持可以构造的ICMP报文字段有哪些,然后在参数后直接说明该字段的含义。构造报文首先要求对报文的各个字段非常熟悉,所以先看一下UDP首部的图表:
ICMP结构:
  0                          15 16                          31
8位类型	8位代码	16位检验和
其它一些细节信息内容
sendip_表4
Arguments for module ./icmp.so:
       -ct x  ICMP message type
    构造ICMP报文类型,一个字节。内容比较多,最常见的类型如下:
0 表示Echo Reply
3 表示Eestination Unreachable
    这个又分很多类型,这里不作分析,具体可以参见资料。
4 Source Quench
5 Redirect
8 Echo
10 Router Selection
11 Time Exceeded
13 Timestamp
       -cd x  ICMP code
    构造代码字段,取值范围0-255,超过255后变为0,默认配置为0。
       -cc x  ICMP checksum
    构造checksum字段,2个字节。默认是正确内容。
[root@FC5 ~]# sendip -v -p ipv4 -is 192.168.96.253  192.168.96.202  -p icmp -ct 3
发送一个源地址为192.168.96.253的类行为3的icmp报文给192.168.96.202这个地址。
小结:
    这篇文档主要是介绍sendip的报文构造方式,而sendip的缺陷就在于它不能连续的发送报文,所以这里提供一个简单的perl脚本,来循环的发送数据包,虽说不能形成flood的效果,但是对于测试可以达到数量控制的目的,有助于自动化脚本的测试,提高测试的效率。
#!/usr/bin/perl -w
 $i=1;
while ($i<2)
 {
   for($j=0;$j<=65;++$j)
   {
     system "sendip -v -d r64 -p ipv4 -iv 4 -ih 5 -il 20 -ifm 1  -if 0 -iy 8  -is 13.1.1.2 -id 192.168.98.173 -p udp -us $j -ud $j  -ul 56 192.168.98.173";
     system "sendip -v -d r64 -p ipv4 -iv 4 -ih 5 -il 20 -ifm 0  -if 0x3 -iy 8  -is 13.1.1.2 -id 192.168.98.173 -p udp -us $j -ud $j -ul 56  192.168.98.173";
     system "sendip -v -d r64 -p ipv4 -iv 4 -ih 5 -il 65535 -ifm 1  -if 10 -iy 4  -is 13.1.1.2 -id 192.168.98.173 -p tcp -ts $j -td $j -tt 8  192.168.98.173";
   }
 ++$i
}
//i代表循环的次数,j代表端口,本来是65535,我修改了一下,可以根据需要来调整次数和//端口范围,这个脚本感谢吴梦洁的提供,我只是做了注释和修改。


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -