简易爬虫(爬取本地数据)
这段时间空闲下来了,想来总结一下这次综合实训自己做的一个项目,还是第一次自己单独实现一个项目,毕竟是个菜鸟,只是简单实现了一下基本功能。
这个项目是基于Java编写的,爬取本地网络流量并根据头部进行简要的分析,同时编写了图形界面,在图形界面上进行展示,当然这里有些代码是参考的网上别人编写的好的代码,这里感谢大家的分享,下面正式介绍这个项目。
1、项目要求
网络流量在线分析系统的设计与实现
简介:设计并实现一个网络流量的分析系统。该系统具有以下功能:
(1)实时抓取网络数据。
(2)网络协议分析与显示。
(3)将网络数据包聚合成数据流,以源IP、目的IP、源端口、目的端口及协议等五元组的形式存储。
(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。在这些统计数据的基础上分析不同网络应用的流量特征。
实训主要包括:
(1)能够实时抓取网络中的数据包。并实时显示在程序界面上。用户可自定义过滤条件以抓取所需要的数据包。
(2)分析各个网络协议格式,能够显示各协议字段的实际意义。例如,能够通过该程序反映TCP三次握手的实现过程。
(3)采用Hash链表的形式将网络数据以连接(双向流)的形式存储。
(4)计算并显示固定时间间隔内网络连接(双向流)的统计量(如上行与下行的数据包数目,上行与下行的数据量大小等)。例如,抓取一段时间(如30分钟)的网络流量,将该段时间以固定时长(如1分钟)为单位分成若干个时间片,计算网络连接在每一个时间片内的相关统计量。并在上述统计数据的基础上分析不同应用如WEB、DNS、在线视频等服务的流量特征。注意,可根据实际的流量分析需要自己定义相关的统计量。
2、项目完成结果
这里这个项目完成了上面的大部分内容,但是TCP三次握手的分析,简单来说就是判断TCP中 seq 、ack、ACK 字段的值,这里并没有完成,在调试的过程中只能捕捉到第一次握手,第二次握手和第三次握手并没有捕捉到,我也不明白为什么,以后有时间会重新修改这个项目并上传。
这里放一下程序的一些截图:
程序界面:
捕捉以太网MAC帧:
简要分析MAC帧里面的字段含义:
number:序号
timestamp:时间戳wire length:帧长captured length:捕获长度----------------------------------------Frame----------------------------------------Frame:
Frame: number:序号Frame: timestamp:序号Frame: wire length:帧长Frame: captured length:捕获长度Frame:Eth: ******* Ethernet - "Ethernet" - offset:偏移量 (0x0) length:长度 protocol suite:协议族(LAN、WAN、WLAN、VLAN、VPN)Eth: Eth: destination:目的MACEth: .... ..0. .... .... = [0] LG bit:或称UL位,0为供应商分配,当以管理方式将设备的MAC地址更改为其他地址时将此位设置为1Eth: .... ...0 .... .... = [0] IG bit:0为单播MAC地址,1为多播或广播地址Eth: source = 来源MACEth: .... ..0. .... .... = [0] LG bitEth: .... ...0 .... .... = [0] IG bitEth: type :以太网帧类型(IPv4、ARP、IPv6、PPP)Eth:
程序中还获取了ARP、HTTP、ICMP、IP(主要是IPv4)、RTP、TCP、UDP,当然只是利用是否含有帧中含有该头部来进行判断。
至于对不同流量的特征流量的,则是根据 DNS 是基于 UDP 和 TCP 53 号端口来进行分析获取,网页流量获取则是 HTTP ,当然现在大部分网页都采用了 https 密文的方式来进行网络传输,大家需要抓取 http 的时候可以打开含有多图片的页面,网页上的图片传输还是利用的 http。
还有项目中的 RTP 实时传输协议,主要是传输视频流量的,但是只有在 Micosoft Store 里面下载的视频应用是基于这个协议,这点需要注意,单独的国内很多视频应用都不是基于这个应用。
3、项目配置
本项目基于Java编写,所以就是正常的 JDK 和 eclipse 。用到的其他资源包的话这里没有使用 Maven 这些构造工具,而是采用了添加 jar 包的方式,主要的配置我之前的博客里已经给出了介绍,大家可以直接查看我之前的博客。
这里给出链接:
4、项目资源
这里的话我将项目里面的代码放在了github上,有兴趣的可以进行下载:
同时我也将项目中用到的一些 jar 包、jar 包使用文档、抓取数据的分析和代码直接放在了博客园里,有需要的可以进行下载:
吾生也有涯,而知也无涯。