Scapy在网络协议分析实验教学中的应用
2014-08-10李树军
李树军
(1.盐城师范学院 信息科学与技术学院,江苏 盐城 224002;2.南京大学 软件工程学院,南京 210093)
Scapy在网络协议分析实验教学中的应用
李树军1,2
(1.盐城师范学院 信息科学与技术学院,江苏 盐城 224002;2.南京大学 软件工程学院,南京 210093)
针对网络协议分析实验教学中存在的问题,介绍了协议分析软件——Scapy的工作原理和功能优势。提出了将Scapy应用于网络协议分析课程实验教学的方法,总结了Scapy在教学中的基本过程,并给出了实验教学应用实例。在网络协议分析实验教学中使用Scapy,有利于学生更加直观地理解网络协议的实现原理,能得到较好的教学效果。
Scapy软件; 实验教学;网络协议;协议分析;计算机网络
网络协议分析课程是网络工程本科的一门专业课程,主要是在学习计算机网络课程的基础上,就网络协议的基础理论、体系结构、性能特点、技术方法和所解决的问题等方面进行学习。学生通过本课程的学习,进一步掌握常用网络协议的工作原理与机制,在实践中能充分利用所学知识分析和研究协议运行过程中出现的各种现象和问题,能够利用网络协议的原理解释网络的工作过程,训练灵活运用所学知识解决计算机网络相关综合问题的能力。网络协议分析是一门实践性很强的课程,其实验内容在传统的实验环境下很难模拟或成本太高。为此,尝试将国外广泛使用的Scapy引入协议分析实验教学,以较低的成本提供丰富的实验教学环境,增强学生对计算机网络协议的理解。
1 网络协议分析实验教学现状
实验教学离不开实验环境,为了解决这个问题,各高校一般采用如下方案[1-4]:
1)建设基于硬件的协议分析平台。为了抢占高校市场,一些知名的网络厂商(比如,国外的福禄克、安捷伦,国内的锐捷网络、神州数码)提出了网络协议分析实验室整体解决方案,部分资金充足的高校一般倾向于选择这种方案来建设协议分析实验室。
2)采用协议分析软件进行实验。另外一些高校则采用Sniffer Pro、Ethereal、科来等协议分析软件来进行网络协议分析实验。这种方法资金投入很少,解决了传统实验教学实验设备数量少、实验时间紧张、实验地点单一的弊端。
这两种方案的优缺点对比如表1所示。
此外,实践表明,这两种解决方案还存在一些共同的缺点,主要体现在以下三个方面:
1)仅能对捕获到的数据包进行查看分析,缺乏数据包构造和发送方面的功能。不能根据自己的需要灵活批量定制各类数据包并发送到网络中去,在发送的同时不能接受来自网络的反馈数据包并分析它们。
2)不能根据需要灵活地对大量的数据包进行相关性分析,不能根据分析结果生成直观的图表。
3)可扩展性差。不具有可编程性,缺乏二次开发能力,缺乏第三方组件支持。不支持自定义网络协议,不具备协议测试的功能。
表1 两种解决方案优缺点对比
2 Scapy介绍
Scapy[5]是一款基于Python开发的开源软件,可以运行于Linux、FreeBSD和Windows等主流操作系统平台。目前,在国外应用较为广泛,具有良好的开放性和可扩展性,并具有如下三个特点:
1)它是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和数据包嗅探与分析工具。它提供多种类别的交互式生成数据包或数据包集合,能方便地对数据包进行编辑、发送、嗅探、应答和反馈匹配等,利用它可以很方便地构造各种数据包用于各种网络协议分析与测试[6]。
2)丰富的组件支持。Scapy可以调用GnuPlot来绘制各类分析、统计报表;可以调用PypCAP来导入Sniffer Pro、Ethereal和Wireshark等其他协议分析软件捕获的数据包;可以调用PyCrypto来进行WiFi的WEP密码破解;可以调用VPython对数据包分析结果进行3D呈现。
3)强大的二次开发能力。可以通过编写脚本完成各类复杂实验;可以引用Scapy编写自己的网络工具。利用Scapy可以方便地构造新的网络协议,具有协议Fuzzing测试等功能。
3 Scapy在协议分析实验中的应用
3.1 协议分析实验流程
虽然Scapy使用比较简单,开发者也提供了大量图文并茂的使用教程,但在开始学习前,老师最好花适当的时间向学生介绍软件的基本功能、安装方法、基本使用方法和技巧。完成这些准备工作后,开始进入网络协议分析实验。使用Scapy进行协议分析实验的流程如图1所示。整个实验过程主要有三部分的工作量:基础学习、实践与应用和进阶学习。
图1 协议分析实验流程图
1)基础学习。在这一阶段的学习里,学生要了解该网络协议的工作原理和功能。在此基础上,详细学习协议数据结构,理解各字段取值范围、作用和相互关系。尝试自己构造协议数据报文;尝试把构造好的数据报文发送到网络中去,看对网络有什么影响,能获得什么样的反馈;尝试定制过滤参数进行相关数据包的捕获,分析捕获到的多个数据包,分析数据包各字段值的变化情况,发现各个数据包的相互关系。
2)实践与应用。学习的目的在于应用。通过这一阶段的学习,加强学生对网络协议的理解和掌握,培养学生的动手实践和设计分析能力,使学生能运用所学知识解决实际问题,培养创新型人才。在这一阶段的学习中,老师要注意引导,从案例的设置到实验步骤的分解、讲解,要注意循序渐进。
3)进阶学习。本阶段是对前面两个学习阶段的总结与提高,让学生结合所学知识与实际应用背景,进行综合性的实验,培养学生运用已有知识去发现、分析和解决问题的能力。比如,在分析地址解析协议(address resolution protocol,ARP)[7-8]的时候,老师适当引导,使学生理解、掌握ARP协议的工作原理,协议存在的漏洞后,让学生利用Scapy的可编程性,开发一个针对ARP欺骗攻击的检测与报警工具。又比如,在分析完SNMP协议的时候,让学生基于Scapy开发一款网络管理工具,对网络设备接口的流量情况进行监控和采集,对采集到的结果进行分析并生成相应的报表,能对异常流量进行报警等。
3.2 应用Scapy进行协议分析实验教学的优势
应用Scapy作为网络协议分析实验的工具和平台,有以下五个方面的优势:
1)经济性。Scapy是一个免费的、开源的网络协议分析、测试软件。使用Scapy,学生完全可以在普通PC环境下完成各类网络协议的分析实验,而学校只需投入极少的资金,既节约了实验成本,又能得到较好的实验教学效果。
2)方便性。软件严格遵循网络协议分层的思想,在实验时,网络协议的所有层面都可以由实验者控制。比如,要定义一个目的IP地址为192.168.1.1的ICMP Request包,通过命令p=IP(dst="192.168.1.1")/ICMP()即可完成。对于已定义的数据包,软件也提供了方便的修改功能,比如,p.ttl=4。用命令r=sr(p),即可把刚才定义好的数据包发送出去,并把网络反馈回的数据包保存在r中。
3)全面的网络协议支持。Scapy支持从IPv4到IPv6、从数据链路层到应用层的各种网络协议。为了方便使用者,对于一些常用的协议,Scapy还做了细化。比如,针对ICMPv6协议,Scapy就对ICMPv6ND_NA(Neighbor Advertisement)、ICMPv6ND_NS(Neighbor Solicitation)和ICMPv6ND_RA(Router Advertisement)等几种数据包格式做了预定。
4)较强的数据处理能力。学生可以用Scapy中的数据处理工具,对大量的网络数据包进行统计分析,分析吞吐量、时延、丢包率等,并进行直观的图示。
5)灵活性和可扩展性。Scapy所有的源代码公开,任何人都可以免费获得、使用和修改其源代码。学生可以根据自身的需要方便地设计新协议,扩展新的功能模块。Scapy有完善的技术社区,在这里你可以和全球的使用者交流学习。此外,Scapy的技术爱好者开发了丰富的辅助组件,结合这些组件,可以使Scapy变得无所不能。
4 Scapy在教学中的应用实例
下面以两个实例来进一步说明Scapy在网络协议分析实验中的应用,一是利用Scapy对网络故障进行诊断,二是基于Scapy开发一个网络扫描程序。
4.1 Scapy在网络故障诊断中的应用
故障描述与分析:某独立Web站点提供静态页面访问服务,平时访问正常,突然访问速度变得较慢,而此时访问者访问其他站点是正常的;说明访问者所在的网络正常,问题可能出在远端网络或者Web服务器上,因为站点提供的是静态页面服务,对服务器内存和CPU的要求很低,初步估计问题与网络有关。由于是第三方的服务器,不能登录进服务器进行查看。结合所学知识,利用Scapy进行故障诊断,步骤如下:
1)Web服务器当前网络流量判断。运行TCP/IP协议栈的系统都有一个IPID系统变量作为本机发送IP包的计数器,系统每发送一个IP 包,系统就做IPID+1运算,同时,系统发送每个IP包的时候会把当前的IPID值填充到IP包IP首部的16位标识字段里[9]。因此,我们可以通过了解目标服务器IPID的变化情况来估算其网络流量的大小。具体做法是:发送一个TCP包给目标主机,然后,从接收到的反馈数据包中提取出IPID值;再给目标主机发送一个数据包,再从反馈数据中得到一个IPID值,记录两个值的差;重复前面的操作,持续一段时间后,可以得到系列差值。通过这些差值,就能得到目标主机的网络流量情况。Scapy测试代码如下:
packet = IP(dst="www.test.com")/ICMP()
a,b = srloop(packet,prn=lambda (s,r):r.id)
a.diffplot(lambda (s1,r1),(s2,r2): (r2.id-r1.id))
结果如图2所示。
从图2可以看出, IPID值变化较小,最大才90,也就是说目标主机当前的数据包流量最大为90pps,按最大数据包计算,最大数据流量为90×1 518/1 000 KB/s,约为136.62 KB/s,流量很小,不是主机网络拥挤造成的,继续进行下面的诊断。
图2 目标主机IPID变化率
2)网络延迟判断。经过前面的分析,估计问题出在中间网络节点上,需要进行确认。对于中间网络,一般分析其网络延迟情况。当数据在网络中传输时,每个处理数据包的路由器都需要把IP首部的TTL字段的值减1,如果路由器发现TTL的值为0,则丢弃这份数据,并且返回一个类型11、代码0的ICMP包给源主机,告诉它报文超时。根据这一原理,我们设置数据包的TTL为需要的值,让它到达某个路由器节点的时候TTL值正好变为0,这样就得到一个路由器节点的反馈数据包,计算接收到反馈包的时间与发送数据包时间的差值,就是该节点的网络延迟时间。调整TTL值能得到各个节点的网络延迟,Scapy测试代码如下:
a,b = srloop(IP(dst="www.test.com",ttl=(7,11))/TCP())
图3 中间网络节点延迟
结果如图3所示。从图3中可以看出,除一个节点外,其他节点的网络延迟稳定在50 ms以下,属于正常现象,只有101.4.112.77这个节点,网络延迟在400~500 ms之间波动,这个数值明显异常,说明节点网络负载较大或者链路有问题。至此,故障诊断完成
4.2 基于Scapy开发网络扫描程序
有时出于网络管理或者其他目的,需要快速发现同网段在线的主机。传统的方法是采用网络扫描软件对每个IP地址发送一个ICMP Request包,如果能收到来自这个IP反馈的ICMP Response数据包,则表明此主机在线。挑战在于,现在很多主机都安装了防火墙软件,发送过去的ICMP Request包将被防火墙拦截,导致扫描失败。
ARP规定,网络中所有的主机在收到ARP请求后,首先检查数据包中的目的IP是否和自己的IP地址一致,如果相同,就必须反馈一个 ARP响应包给源主机。因此,可以利用ARP协议的特性进行同网段在线主机的扫描。利用Scapy的可编程性,只要少量的代码即可实现此扫描程序,代码如下:
#!/usr/bin/env python
import sys
if len(sys.argv) != 2:
print "Usage: arpscan
print "Example: arpscan 192.168.1.0/24"
sys.exit(1)
from scapy.all import srp,Ether,ARP,conf
conf.verb=0
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/
ARP(pdst=sys.argv[1]),timeout=2)
for snd,rcv in ans:
5 结束语
网络协议分析课程教学存在内容枯燥,难以实验等困难,需要不断探索和研究先进的教学方法,以激发学生对该门课程的学习兴趣,提高教学质量。Scapy功能强大,可扩展性强,在教学中引入Scapy,可以增强学生对于网络协议的理解,还可以提高学生分析问题和动手的能力。实践表明,使用Scapy作为一种教学辅助手段对提高协议分析课程教学的效果和水平有积极的意义,在一定程度上能弥补当前协议分析课程教学中的不足,是协议分析课程教学的一种全新的探索。
[1] 陈健,吴海军,徐煊. 计算机网络协议分析与开发实验的一种新教学方法[J]. 计算机教育,2011(10):99-103.
[2] 耿奎,黄雪琴. 基于软件构建网络协议分析实验平台[J]. 数字技术与应用,2011(4):131-133.
[3] 张巧荣,张斌. 协议分析软件在计算机网络实验教学中的应用[J]. 实验室科学,2010,13(3):119-121.
[4] 袁春蕾,任艳丽. 千兆网络协议分析实验平台的设计研究[J]. 电脑编程技巧与维护,2012(22):65-66.
[5] Philippe.Scapy online document[EB/OL].(2013-03-10)[2013-06-22].http://www.secdev.org/projects/scapy/doc/index.html.
[6] Wikipedia.Scapy[EB/OL].(2011-03-01)[2013-06-25].http://en.wikipedia.org/wiki/Scapy.
[7] 田宝勇. ARP协议的攻击及防范措施的分析[J]. 实验室科学,2010,13(1):113-114.
[8] Socolofsky T.A TCP/IP tutorial[EB/OL].(1995-03-10)[2013-06-25].https://tools.ietf.org/ht mL/rfc11.
[9] 百度百科.IP数据报[EB/OL].(2013-03-10)[2013-06-25].http://baike.baidu.com/view/1519445.htm.
Application of Scapy in Network Protocol Analysis Experiment Teaching
LI Shujun1,2
(1. College of Information Science and Technology, Yancheng Teachers University, Yancheng 224002, China;2. College of Software Engineering, Nanjing University, Nanjing 210093, China)
This paper focuses on the problems in network protocol analysis experiment teaching, and introduces the working principle and functional advantages of the Scapy, a protocol analysis software, that has been widely used in foreign countries. It puts forward a teaching method for network protocol analysis experiment teaching. Then, the basic teaching process of using Scapy is summed up, and an application example is provided. It is beneficial for students to directly understand the principles of network protocol, and the good experiment teaching results can be obtained.
Scapy software; experiment teaching; network protocol; protocol analysis; computer network
2013-07-31;修改日期: 2013-11-15
江苏省高等教育教改研究基金资助项目(169)。
李树军(1980-),男,硕士,讲师,研究方向:计算机网络、网络安全。
TP393;G642.423
A
10.3969/j.issn.1672-4550.2014.06.037