热身题
服务器正在运转着,也不知道这个技术可不可用,万一服务器被弄崩了,那损失可不小。
因此, 决定在虚拟机上试验一下,不当心弄坏了也不要紧。须要在的电脑上装上虚拟机和linux系统
安装虚拟机(可参考Vmware、Virtual Box等)
安装ubuntu系统(推荐安装16.04版本)
写一个helloworld程序,在ubuntu系统上编译运行
(你可能须要了解linux系统的终端和一些基本命令、文本编辑工具nano、如何编译代码、运行程序)html
- 1.安装虚拟机Vmware:在官网下载页面选择workstation pro,下载并安装。

运行workstation pro节目以下
python
基本题
了解新技术
众多sketch的技术中,Count-min sketch 经常使用也并不复杂,但你可能须要稍微了解一点点散列的知识。从它入手不失为一个好选择,把它记录在你的技术博客上:linux
- 1.简单描述什么是sketch
- sketch是基于哈希的数据结构,经过合理设置哈希函数(也称散列函数),在将数据进行哈希运算后(可能包含屡次哈希运算,即多重哈希,目的是提升精确度),将具备相同哈希值的键值数据存入相同的特定区域内,以减小空间开销。将各个区域内的数据值做为测量结果,存在必定的偏差,但可使用各类方式减少偏差。
- 2.描述Count-min sketch的算法过程
- 摘自维基百科:In computing, the count–min sketch (CM sketch) is a probabilistic data structure that serves as a frequency table of events in a stream of data. It uses hash functions to map events to frequencies, but unlike a hash table uses only sub-linear space, at the expense of overcounting some events due to collisions.( 在计算中,count-min sketch(CM sketch)是一种几率数据结构,用做数据流中事件的频率表。它使用散列函数将事件映射到频率,但不像散列表仅使用子线性空间,代价是因为冲突致使一些事件过分计数。)
- 目的:统计一个实时的数据流中元素出现的频率,而且准备随时回答某个元素出现的频率,不须要的精确的计数。
- 技巧:由于储存全部元素的话太耗费内存空间,全部不存储全部的不一样的元素,只存储它们Sketch的计数。
- 实现大体过程:
- 创建一个1~x的数组,做为储存计数的载体。
- 对于一个新元素,哈希到0~x中的一个数x0,做为该元素的数组索引。
- 查询元素出现频率时,返回元素对于数组索引中储存的数便可。
实现新技术(30')
大体了解了Count-min sketch,接下来就须要实现它了。本着不须要重复造轮子的思想,你上github一查,果真发现了相关代码。
并不须要深入理解代码,你只须要会用,你的目标是在虚拟机上跑通Count-min sketch:c++
- 1.克隆一种版本(python或者c语言)的代码,大体了解如何使用这个代码,在ubuntu系统上编译。本身任意编写一个小测试,成功运行这个代码。
经过pip安装countminsketch0.2
git
在GitHub上找到了一个countminsketch项目
github
- 由于代码比较久远,须要把xrange()函数更替为range()函数
- 出现Unicode-objects must be encoded before hashing问题时,发现是update() 方法必须指定要指定编码格式,不然会报错。应在update()内添加.encode("utf8")
- 在网络上下载《飘》的英文版
编写程序,统计文中的地名“tala”的出现次数
算法
运行成程序三次,结果分别为
ubuntu
2.你也能够本身实现Count-min sketch。数组
获取用户请求(15')
如今须要获取用户的请求信息,其实请求就是网络传输的数据包,可使用本身的网络环境来模拟服务器的请求,使用工具来捕获这个数据包:缓存
测试新技术
完事具有,只欠东风:
- 用跑通的Count-min sketch程序读文件,得到最后的处理结果,请求大小超过阈值T认定为黑客,此处T本身定义。对于你所完成题目,把实现思路和实现结果记录在博客中,把代码提交到github的仓库上。
稍微改造一下第二次做业中的代码,添加了count-min sketch算法
开放题(50')
- 理论部分(25')
- 实验部分(25')
- 1.here-->整合了两个步骤,减小了代码读写,由packet_capture直接获得结果
- 改进中的问题:
- 整合后代码的运算结果与原来的结果有出入,可能的缘由是原算法的第一步筛选过程当中错误筛除了一些内容。

- 新程序出现了一些莫名其妙的数组越界错误,但检查后并未发现packet_capture.txt中有存在单行内容由于无空格以致于split()函数没法分割的问题。因此加了一个len(list())>a绕开这个问题
- 2.实时处理请求还未能实现,
- 主要障碍有:
- 是不懂得如何在程序中启动tcpdump进行抓包
- 由于Ubuntu虚拟机上py配置出了一些问题,不得已将packet_capture.txt文件移动到win10下进行处理
- 对这部分的一些想法:
- 基本流程应该是:
- 数据生成->实时采集->将数据保存在缓存中->实时计算->计算结果存储->被查询
- 引入一些大数据处理框架。大数据处理系统可分为批式大数据和流式大数据两类。其中,批式大数据又被称为历史大数据,流式大数据又被称为实时大数据。流式大数据系统包括了:Spark Streaming、Storm、Flink等
- 能否模仿CentOS与wireshark之间利用PIPE接口实现数据从虚拟机上实时拷贝到win系统中进行处理
- 这篇文章中提到了关于python调用tcpdump的相关内容