2019寒假训练营第三次作业

学习视频课程

学习笔记

实验题

所用的count_min_sketch

热身题

思路
以ubuntu系统自带的gedit编辑器写好代码,然后打开终端用gcc的指令编译并运行代码。

结果
1593499-20190213153821852-885482966.png

基本题

了解新技术

1.简单描述什么是sketch:
sketch就是利用哈希值来估算数据流中任意元素频率的方法。要计算元素的频率,可以给所有元素都设置一个计数器,但面对大量的元素,这种方法会消耗大量的存储空间。而sketch利用hash函数计算相应的哈希值,并根据哈希值的范围开数组存储元素出现的次数,大大节约空间。

2.描述Count-min sketch的算法过程:
0.比sketch更准确,使用的空间也更多。

1.选定d个hash函数,开一个 dxm 的二维整数数组作为哈希表。

2.对于每个元素,分别使用d个hash函数计算相应的哈希值,然后在对应的位置上增1,二维数组中的各个整数称为sketch。

3.要查询某个元素的频率时,只需要取出d个sketch, 返回最小的那一个(其实d个sketch都是该元素的近似频率,返回最小的那个以减小误差)

实现新技术

思路
打开GitHub,搜索Count-min sketch,结合搜索引擎挑选代码,复制代码,运行代码。

结果
1593499-20190215195745384-1543702382.png

获取用户请求

思路
借助搜索引擎了解tcpdump,然后打开终端输入命令,得到请求文件。

结果
1593499-20190215200233651-1811994192.png

请求格式处理

思路
0.不懂题目的意思没有思路。

1.决定加上过滤条件,重新抓取数据包重定向到请求文件中。

2.编写程序,读取请求文件,找出符合条件的请求并按相应格式输出到新文件中。

结果
1593499-20190216190034027-1403747551.png

测试新技术

思路
1.首先大胆猜测题目应该跟上次是一样的意思,多个用户向bob发出请求,于是重新处理文件,每行保留一个ip地址和一个数据包的长度。

2.先用程序大致跑一遍,知道应该设置多大的T。

3.在程序中每次读取新的请求都判断是否超出阈值,超出则保存到黑名单中。

4.输出黑名单。

结果
1593499-20190216190130954-1611411582.png

开放题

理论部分:

1.解释为什么 sketch 可以省空间:
sketch借助hash把字符串都转换成了固定范围内的整型常量,作为数组的下标来索引该字符串,并不直接存储字符串,使得不定长的字符串更易查询与计数。
而且sketch所用的数组是定长的一维数组,不会随处理量的增加而增加,因此节省空间。

2.用流程图描述Count-min sketch的算法过程
1593499-20190216202356627-1010408443.png

3.拿它和你改进后方法进行对比,分析优劣
优:比改进后的方法更快更省空间,并且可以处理很长的字符串。
劣:用的技术更高级,用到一堆没学过的,而且代码并不好找,还需要花时间理解。

4.吐槽Count-min sketch
方法本身挺好,没有什么想吐槽的

实践部分:

0.0.实践中使用【tcpdump -n -t -q -i any udp >> pakcet_capture.txt】过滤格式清楚的udp协议包,便于处理使用。
0.1.udp包好少啊啊啊啊啊,要等好久,偶尔还会有ip6的包...。
0.2.发现count_min_sketch用Devc++默认的cpp文件编译出错,c则正常。

1.现阶段至少也要读取文件一次,查不到怎么把tcpdump的信息直接给程序使用,也找不到tcpdump直接过滤得到所需格式的指令。只能是把处理pakcet_capture.txt的程序和后面的找黑客程序拼在一起,在冥思苦想之下尽可能实现了手动实时处理(?)

2.就是不停地抓包,然后手动多次启动程序(再实现自动启动程序不就自动实时处理了么??) ,随着抓到的包增加,黑客也会一个个浮出水面......如图所示

我就是代码

我就是图:
1593499-20190218172033284-371979350.png

转载于:https://www.cnblogs.com/Stareven233/p/10370285.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值