1、本 科 毕 业 论 文Web 嗅探器的设计与实现-信息源嗅探模块Design and Implementation of Web Sniffer-Source Sniffer Module姓 名:学 院:软件学院系:软件工程专 业:软件工程年 级:学 号: 指导教师: 年 月摘 要Internet 的迅速发展给社会和人们的生活带来了重大的影响,它改变了人们获取信息的方法。而在线视频无疑成为了最受欢迎的信息传播方式, ,大量的视频网站除了给网友们获取信息提供了极大的便利外,也给网友们提供了一个很好的休闲和娱乐平台。但大部分在线视频网站为了减轻服务器的负担和防盗链,都不提供可下载的链接地址,有时候
2、碰到好的视频,想要收藏就不得不费脑筋了。本文的目的就是设计并实现一个 Web 嗅探器,可以嗅探出 FLV 视频的信息源,让用户轻松地下载所需视频。在查阅了相关的文献研究基础上,本文首先介绍了 WEB 信息传输所依赖的一组标准协议 TCP/IP 协议和应用层的 HTTP 协议,重点论述了 HTTP 消息的交互过程,然后深入分析了网络数据包的捕获和分析原理,最终设计并实现了一个基于 JPcap 类库的 Web 嗅探程序,该程序可以成功的捕获到大量网站的 FLV 视频的链接地址。关键词: FLV 视频;嗅探器;JPcap。AbstractThe rapid development of Intern
3、et has brought about a significant impact on the society and peoples lives; it changed the way people access information. The online video is no doubt becomes the most popular means of the information dissemination. A large number of video websites not only provide a great convenience for users to a
4、ccess information, but also provide an excellent platform for the leisure and entertainment. However, most of these sites do not provide the link to download, sometimes run into a good video and want to favorites it; users have to manage to find ways to find its URL. The purpose of this thesis is to
5、 design a sniffer, which is able to find out the source of online video.Based on the relevant researches and academic thesis, the author introduces a group of standard protocol- TCP / IP protocol, the HTTP protocols of the application layer first, focuses on the interaction process HTTP messages. Th
6、en gives the depth analysis of the principle of capturing the network packets, and finally design of a Web sniffer, it can capture a large number of FLV video. Key words: flv video; sniffer; JPcap. 目录第一章 绪论 .11.1 研究背景 及意义 11.2 主要研究内容 21.3 论文组织结构 2第二章 Web 嗅探器的应用技术背景 .32.1 信息源获取方法 32.2 TCP/IP 协议 72.3
7、HTTP 协议 .122.4 Winpcap 驱动介绍 .182.5 JPcap 类库介绍 202.6 本章小 结 22第三章 Web 嗅探器的需求分析及总体设计 .233.1 系统开发的需求 233.2 系统总体设计思想 233.3 系统程序结构 .243.4 本章小结 26第四章 Web 嗅探器的详细设计及实现 274.1 网络数据包的捕获 .274.2 数据包的分析 .324.3 链接地址的形成 334.4 本章小结 34第五章 Web 嗅探器的实现效果 355.1 嗅探界面 .355.2 嗅探记录界面 .375.3 文件下载界面 .395.4 已完成任务界面 405.5 使用帮助界面
8、.415.6 系统应用测试 .415.7 本章小结 43第六章 总结 与展望 .44参考文献 45致谢 .46ContentsChapter 1 Introduction 11.1 Background and Objectives .11.2 Contents of Thesis21.3 Structure of Thesis 2Chapter 2 The Technical Background of Web Sniffer .32.1 The Method of Obtain Information Source .32.2 TCP/IP Protocol 72.3 HTTP Proto
9、col.122.4 Introduction of Winpcap Driver182.5 Introduction of JPcap202.6 Summary of This Chapter .22Chapter 3 The Requirements Analysis and Overall Design233.1 Requirements Analysis233.2 Overall Design233.3 Program Structure .243.4 Summary of This Chapter .26Chapter 4 The Detail Design and Implement
10、ation of System 274.1 Capture of Network Packets .274.2 Analysis of Packet.324.3 Formation of Url .334.4 Summary of This Chapter .34Chapter 5 The Achieved Effect of Web Sniffer.355.1 Sniffer UI .355.2 Sniffer Records UI375.3 Download UI.395.4 The Completed Task UI405.5 Helps UI .415.6 System Test .4
11、15.7 Summary of This Chapter .43Chapter 6 Conclusions and Future Work.44References 45Acknowledgements 46第一章 绪论1第一章 绪论1.1 研究背景及意义在线视频网站的迅速发展,让人们能够以更直观的方式获取信息,了解社会。这些网站也成为了人们休闲和娱乐的主要平台。但这些网站为了防盗链,大都采用 Flv 格式视频,不提供可下载的链接地址。所以无法直接下载,只能采取其它方法。目前最要的 Flv 视频链接地址的获取方法有三种 1-3:第一种:从本地缓存找,该方法比较麻烦。首先正常观看视频,不要关闭浏
12、览器,其次等视频加载完毕,进入 C:Documents and Settings你的用户名Local SettingsTemporary Internet Files 这个文件夹,然后查找扩展名为flv 的文件即可。第二种:专门的 flv 视频地址解析网站,如 。只要输入视频所在页面的地址(浏览器地址栏)就可以。但该方法可能是采取 HTML 页面源码分析方法来获取链接地址,具有一定的局限性。第三种:通过网络嗅探器的方法,捕获数据包,并对其进行分析,最终形成地址,该方法能够获取大部分网站的视频地址,具有通用性。该方法的代表产品有 Project URL Snooper、影音神探和遨游浏览器自带的
13、嗅探器等。上面三种方法中,第一种方法显得麻烦又笨拙,第二种方法不具通用性,速度又慢。第三种方法通过对网卡抓包的方法,其准确率高,而且具有通用性,让隐藏的很好的视频、音频等多媒体的链接地址无所遁形,相信是未来多媒体链接地址获取的主要方法。因此本文的目的就在于开发一个 Web 嗅探器,该嗅探器可以嗅探到以 Flv为主的多种网络媒体的下载地址。该论文研究的意义在于通过深入分析网络数据包捕获的原理,加深了对以太网结构、TCP/TP 标准协议和 HTTP 消息交互原理的了解,对未来进一步学习网络知识有极大的意义。Web 嗅探器的设计与实现-信息源嗅探模块21.2 主要研究内容本文是使用 JPcap 类库
14、间接调用 Winpcap 驱动进行网络数据包捕获和分析的研究。本文深入的分析了以太网网络数据包的捕获原理、HTTP 协议原理和HTTP 消息的交互过程。并对论文涉及到的技术背景知识如 TCP/IP 标准协议、Winpcap 驱动和 JPcap 做了详细的介绍。整个系统使用 Java 语言编写,具有良好的界面,便于操作。1.3 论文组织结构以下是论文的具体组织结构:第一章 绪论:介绍论文研究背景、目的和内容。第二章 Web 嗅探器的应用技术背景:作为核心内容的铺垫,详细的介绍论文的理论基础。首先论述当前主流在线视频网站的地址获取方法和原理。然后介绍了目前以太网使用最为广泛的 TCP/IP 协议簇
15、,重点介绍了 HTTP 协议、HTTP 消息和交互过程。最后再介绍了网络数据包捕获需要用到的 Winpcap 驱动和 JPcap 类库。第三章 Web 嗅探器的需求分析及总体架构:介绍了系统开发的需求和系统的总体设计架构。第四章 Web 嗅探器的详细设计:是论文的核心部分。首先详细的分析和讨论了网络数据包的捕获原理、设计步骤和具体实现方法,数据包能否被正确的捕获是系统能否继续进行的关键。然后论述了如何分析数据包和形成链接地址,而链接地址的形成则是系统的最终目的第五章 Web 嗅探器的实现结果:说明了系统最终的实现效果与测试结果。第六章 结束语:对论文的研究进行总结,说明不足之处和未来展望。第二
16、章 Web 嗅探器的应用技术背景3第二章 Web 嗅探器的应用技术背景本章首先介绍了目前在线视频的信息源的获取方法,并分析比较每种方法的优缺点。然后重点介绍和研究开发 Web 嗅探器所涉及的相关技术背景。2.1 信息源获取方法由于目前国内外的主流在线视频网站,如 YouTube、优酷网、土豆网和新浪播客等都是使用 flv 格式,所以本文主要介绍 flv 视频的地址获取方法,其它格式只做简单介绍。其实,诸如 wmv、rm 和 rmvb 格式的视频地址获取的方法还是比较简单的。如果是 wmv 视频,由于它是使用 Windows Media Player 播放器进行播放,只要右击视频(播放器),查看
17、属性,即可看到其真实地址。如果是 Real 视频,右击视频,用 real player 播放,然后在本地打开的那个 RealPlayer 中,依次选择文件-剪辑信息-编辑剪辑属性,即可看到真实地址了。而 Flv 视频的播放器不支持右键查看下载,而且目前大部分的 flv 视频网站都采取了一定的措施来防止盗链和下载,如优酷网防止用户下载就有以下几个措施 3:1. 动态创建 Flv 播放器,防止用查看源代码的方式分析其播放器。2. Flv 文件分割,将一个较长的文件分割成每段大约为 7 分钟的几段,其地址不同,甚至有可能在不同的服务器上。3. 动态生成 flv 文件地址,并且地址有时间限制,过时失效
18、。所以 Flv 视频链接地址的获取还是比较麻烦一些的,但只要它能播放我们就有办法获取到它的地址,目前主要方法有三种:1. 利用本地临时文件。2. 网页解析。3. 软件工具,即嗅探器。Web 嗅探器的设计与实现-信息源嗅探模块42.1.1 利用本地临时文件这种方法对大部分网站都可用,但比较麻烦,显得笨拙。主要步骤是:首先,正常观看视频,不要关闭浏览器,其次,等视频加载完毕,进入 C:Documents and Settings你的用户名Local SettingsTemporary Internet Files 这个文件夹(有可能要用到文件夹选项中的“显示全部文件”才可看见) 。然后,查找扩展名
19、为 flv 的文件即可,很容易找到。可以按时间排序,也可以按大小,视频文件一般都比较大,排在顶部。2.1.2 网页解析该方是根据 flv 视频的播放原理,对视频所在的网页的 HTML 源代码进行解析,并按照该网站的视频地址格式生成地址。视频网站通用的播放原理比较简单:打开页面首先 load 一个播放器,然后播放器根据一定得条件向 WEB 服务器请求 flv 文件并播放。如优酷网的播放原理就是 3:1. 输入地址。2. 根据地址生成页面,load 播放器,并获取播放文件 id。3. 将 id 传给播放器,播放器根据视频 id 获取视频地址。下面本文就针对目前国内比较受关注的在线视频网站优酷网来论
20、述如何通过网页解析来获取其 Flv 视频地址。1. 输入地址,获取加密前的 videoid。典型的优酷网播放地址格式是这样的:http:/ 相关的,也就是说,优酷应该对每个视频有一个唯一的 id,可以通过这个 id 来找到对应的视频。不过地址中的 id 是加密的,在页面源文件中搜索:id_XOTQxNDc3MzY=可以找到 Java script 代码:第二章 Web 嗅探器的应用技术背景5var videoId = 23536934;var videoId2= XOTQxNDc3MzY=;这两个就是加密前后的 videoid。2. 根据加密前的 id 获取 JSON 对象。Flv 播放器 l
21、oad 完成后,会向后台请求该 id 的播放列表(有时一个大的视频可能分解成多个视频),请求地址如下:http:/ MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA; 360SE)Host: 121.9.235.16Connection: Keep-Alive下面对几种常用的方法和头域作简单解释。
22、 方法方法描述了对给定资源应作的处理。在 HTTP/1.1 下,请求的合法方法有:GET、POST、PUT、OPTIONS、HEAD、TRACE 和 DELETE,其中最常用的是 GET、POST 和 HEAD11。常见方法作用如表 2-1。表 2-1:常见方法方法 作用GET 向服务器请求用 URL 标识的资源对象,使用最为普遍POST 向服务器传送数据,常用于 HTML 表单的提交HEAD 向服务器请求资源对象的元信息,服务器不向客户端传送主体内容PUT 创建或替换服务器端资源DELETE 删除服务器端资源 头域头字段一般用于传送除请求外的其他附加信息。第二章 Web 嗅探器的应用技术背景
23、17表 2-2:常见请求消息头域头域 含义Host 服务器名称,通过客户端的请求 URL 确定Accept 客户端可以接受的媒体类型Accept-Language 客户端可以接受的语言类型Accept-Encoding 客户端可以接受的编码类型User-Agent 客户端浏览器类型(三)服务器端响应(Response)状态行(起始行)格式:HTTP 版本号 状态码 Reason-Phrase CRLF响应消息实例如下:HTTP/1.1 302 FoundLocation: http:/119.145.131.28/197b833/4E59D77D-315E03A.flvContent-type
24、: text/htmlContent-Length: 0Connection: closeDate: Sat, 23 May 2009 14:12:17 GMTServer: F_LIGHTY_FS5/消息体,消息可以为空。下面对响应消息的状态码和头域进行简单解释。 状态码状态码表示服务器是否成功地满足了客户的请求,状态码由一个三位整数和解释装态码含义的正文短语组成 11。状态码大致分类如表 2-3。表 2-3:状态码状态码 含义1 受到请求,继续处理2 接受成功,理解请求并给出响应Web 嗅探器的设计与实现-信息源嗅探模块183 重定向4 客户错误5 服务器错误 头域与请求消息相同,头字段一
25、般用于传送除请求外的其他附加信息。表 2-4:常见响应消息头域头域 含义Content-Length 响应主体的长度Content-Type 响应类型Date 响应发送时的日期时间Server 服务器的名称和版本2.4 Winpcap 驱动介绍Winpcap(Windows Packet Capture)是 windows 平台下一个免费、公共的网络访问系统,它为 win32 应用程序提供访问网络底层的能力。Winpcap 不能阻塞、过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报 12。2.4.1 Winpcap 的组成Winpcap 有三个模块组成,分别为:NPF、
26、Packet.dll、Wpcap.dll 13-15。如下图:第二章 Web 嗅探器的应用技术背景19图 2-8:Winpcap 的组成模块第一个模块 NPF(Netgroup Packet Filter),中文名为网络数据包过滤器,是一个虚拟设备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。网络数据包过滤器(Netgroup Packet Filter,NPF) 是 Winpcap 的核心部分,它是Winpcap 完成困难工作的组件。它处理网络上传输的数据包,并且对用户提供可捕获(capture)、发送(injection
27、)和分析性能(analysis capabilities)。第二个模块 packet.dll 为 win32 平台提供了一个公共的接口。不同版本的 Windows 系统都有自己的内核模块和用户层模块。Packet.dll 用于解决这些不同。调用 Packet.dll 的程序可以运行在不同版本的 Windows 平台上,而无需重新编译。第三个模块 Wpcap.dll 是不依赖于操作系统的。它提供了更加高层、抽象的函数。packet.dll 直接映射了内核的调用。Wpcap.dll 提供了更加友好、功能更加强大的函数调用。2.4.2 Winpcap 的功能Winpcap 为 Win32 应用程序提
28、供访问网络底层的能力。它提供了以下的各项功能 9:1. 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;Web 嗅探器的设计与实现-信息源嗅探模块202. 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3. 在网络上发送原始的数据包;4. 收集网络通信过程中的统计信息。Winpcap 的主要功能在于独立于主机协议(如 TCP-IP)而发送和接收原始数据包。也就是说,Winpcap 不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。因此,它不能用于 QOS 调度程序或个人防火墙。目 前 , Winpcap 开 发
29、 的 主 要 对 象 是 windows NT/2000/XP。 目前 基 于 Winpcap 的 应 用 主 要 有 : Winump、 Analyzer、 Ethereal 以 及snort, 这 些 软 件 能 够 捕 捉 网 络 通 信 、 读 取 并 翻 译 来 自 其 他 系 统 的 tcpdump 类 型 二 进 制 数 据 包 。 另 外 还 有 Sniffer, Project URL Snooper 等 有 特 定实 际 用 途 的 网 络 软 件 。2.5 JPcap 类库介绍我们知道,JAVA 语言虽然在 TCP/UDP 传输方面给予了良好的定义,但对于网络层以下的控制
30、,却是无能为力的。JPCAP 扩展包弥补了这一点。JPcap 是一套能够捕获、发送网络数据包的 java 类库,它允许 Java 应用程序捕获或发送数据包 16-18。JPcap 不是一种纯粹的 Java 解决方案,它依赖本地库的使用,因为核心 Java API 不能访问底层的网络数据,它是一种提供在 Windows 或 UNIX 系统上进行这种访问的 Java API,基于 libpcap/Winpcap和原始套接字接口,因此它支持任何实现 libpcap/Winpcap 的操作系统。要在Java 中使用 JPcap 类 库 需要安装 JPcap 的运行和开发环境(在windows2000/
31、xp 系统需要预安装 Winpcap)。现在,JPcap 已经可以在FreeBSD3.x、LinuxRedHat6.1、FedoraCore4、Solaris 和 Microsoft windows 2000/xp 运行。2.5.1 JPcap 的机制JPCAP 的整个结构大体上跟 winpcap/libpcap 是很相像的,例如第二章 Web 嗅探器的应用技术背景21NetworkInterface 类对应 winpcap 的 typedef struct _ADAPTERADAPTER,getDeviceList()对应 pcap_findalldevs()等等 11。 JPCAP 有 1
32、4 个类和 1 个接口,如图 2-8 所示。下面就其中最重要的 4 个类和 1个接口做说明。1类 NetworkInterface 该类的每一个实例代表一个网络设备,一般就是网卡。这个类只有一些数据成员,除了继承自 java.lang.Object 的基本方法以外,没有定义其它方法。2类 JpcapCaptor 该类提供了一系列静态方法实现一些基本的功能。该类一个实例代表建立了一个与指定设备的链接,可以通过该类的实例来控制设备,例如设定网卡模式、设定过滤关键字等等。改类还提供了三个方法来捕获数据包,本系统使用其中的 processPacket()方法来捕获数据包。3类 JpcapSender该
33、类专门用于控制数据包的发送。4类 Packet这个是所有其它数据包类的父类。Jpcap 所支持的数据包有:ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、UDPPacket。5接口 PacketReceiver这个接口用来定义一个方法来处理捕获到的数据包,这个方法被用在Jpcaptor.handlePacket()或 Jpcaptor.processPacket()中。Web 嗅探器的设计与实现-信息源嗅探模块22图 2-9:JPcap 类库的基本结构2.6 本章小结本章首先详细的分析了目前在线视频网站
34、使用最为广泛的 flv 视频地址获取的三种方法的原理,在论述第二种方法时结合了优酷网站进行实例分析,显得更加生动,并比较了三种方法的优缺点。然后详细的论述和介绍了 Web 嗅探器信息源嗅探模块开发所涉及到的技术背景,包括 TCP/IP 标准协议簇、HTTP协议、Winpcap 驱动和 JPcap 类库。为第四章介绍系统详细设计与实现做铺垫。第三章 Web 嗅探器的需求分析及总体设计23第三章 Web 嗅探器的需求分析及总体设计3.1 系统开发的需求在 Web2.0 时代,以国外的 YouTube、Google Video,国内的优酷、土豆网和 56 网为代表的视频分享网站无疑受到了网民们的热力
35、追捧。它们提供了丰富的视频资源,从热点社会新闻到自制视频,提供的视频内容可谓各有千秋。除了这些视频网站之外,还有其它大量提供多媒体信息的网站,如音乐网站,图片网站。大量的信息网站除了给网友们获取信息提供了极大的便利外,也给网友们提供了一个很好的休闲和娱乐平台。但这些网站中有相当部分都不提供文件的可下载的链接地址,有时候碰到好的视频、音乐等,想要收藏就不得不费脑筋了。通过第二章介绍的三种在线视频地址获取方法我们知道,网页解析方法对不同的网站需要不同的算法,而当网站的算法改变时,解析的算法也要跟着改变。这样开发系统不但麻烦、耗时,而且不具有通用性和稳定性。所以我们更推荐使用第三种方法,网络嗅探,通
36、过抓包来获取地址。Web 嗅探器的设计与实现-信息源嗅探模块24Web 嗅探器就是通过抓包来获取地址,让用户在无法直接获得多媒体文件的下载地址的情况,也能轻松方便的下载该文件到自己电脑上。3.2 系统总体设计思想Web 嗅探器主要目的是能嗅探到网页上播放文件的链接地址,并在 HTTP 服务器支持的情况下,可进行多线程和断点续传下载,若 HTTP 服务器不支持该功能,则进行单线程下载。Web 自动嗅探下载器按主要功能划分为两个子模块:地址嗅探模块和文件下载模块。地址嗅探模块通过捕获主机发往端口号为 80 的 TCP 包,并对捕获的包进行分析,通过提取客户端浏览器发往 WEB 服务器的 HTTP 请求消息包的相关信息,重构出网页上的视频、音频等媒体隐藏的可下载地址,以便用户下载珍藏喜欢的视频和音频。文件下载模块提供对嗅探到的媒体文件进行下载的功能。该模块通过对HTTP、多线程和 XML 格式的研究,实现高效友好的文件下载。本论文主要研究的是文件下载模块的实现。系统整体流程图如图 3-1,红色部分为本文要研究的模块:图 3-1:系统整体流程图3.3 系统程序结构程序在按功能模块划分为两大模块的基础上,按照模块子任务划伤为如下