【摘要】
Scapy是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和包嗅探工具。它提供多种类别的交互式生成数据包或数据包集合、对数据包进行操作、发送数据包、包嗅探、应答和反馈匹配等等功能。在功能测试中,在测试业务流程时利用Scapy来生成、发送、接收、应答数据包,并对接收到的数据包进行匹配与校验等操作,从而高效地进行自动化测试。本文将详细介绍如何利用Scapy进行收发包操作。
【关键词】Scapy 接收与发送数据包
1 在测试过程中,人工触发各种测试场景(正常或异常),需要构造各种报文,有的异常报文很难构造,测试效率低。在测试过程中,抓到报文后,人工校验报文,比对报文字段,测试效率非常低。
解决思路
在测试过程中,我们利用Scapy生成我们所需要的数据报文来构造测试(正常或异常)场景,且用Scapy来自动接收并校验报文,从而使测试效率大大提高。
3 (1) send(),在第三层发送数据包,但没有接收功能。如:
send(IP(dst="10.62.40.45",ttl=1)/ICMP())
(2) sendp(),在第二层发送数据包,但没有接收功能。如:
sendp(Ether()/IP(dst="10.62.40.45",ttl=1)/ICMP())
(3) sr(),在第三层发送数据包,有接收功能。
实现的功能是ping主机10.104.4.1。而且是发了4个数据包,得到的结果p可以看到一个tuple元组,可以用type方法验证一下,而且这个元组的成员p[0]和p[1]也分别是元组,p[0]是一对对收发数据包,p[1]是一些没有得到回复的包。如果要想看看每个收发数据包的具体情况,可以用p[0][1]等来查看。
(4) sr1(),在第三层发送数据包,有接收功能,但只接收第一个数据包。
从下面的图看到,我们发了四个数据包,但是结果p却只是一个数据包,并可以看出这个数据包的内容和我们上面sr()的p[0][0]一样。所以,sr1()只是接收第一个数据包。
(5) srloop(),在第三层连续发送数据包,有接收功能,且连续接收数据包,如下:
(6) srp()、srp1()、srploop()与上面(3)、(4)、(5)相同,只是工作在第二层。
(7) sniff(),接收报文。
sniff()常用的参数包括:
iface:指定抓包的eth口;filter:抓包时的过滤条件,filter的填写语法是按照pcap的规则,具体可参见: http://www.manpagez.com/man/7/pcap-filter/;count:抓包的个数;timeout:停止抓包的时长;prn:按照要求显示返回的数据包。