磕磕碰碰做完的寒假作业TuT(二)
# ik的寒假作业
(点右下角的三条杠一样的按钮可以看博文目录哦~)
① 作业的图! 简陋无比的界面23333(●'◡'●)
看到小鱼儿的深受启发,以后有机会可以做一个用图表来显示异常流的!
——————————————
🔺 主要代码(解析&数据处理)
——————————————
def main():
# 读取数据!!
dpkt = rdpcap(r"C:\Users\29080\Desktop\ikzhuabao3.pcap")
# 定义一下
yuzhi1 = int(request.form.get("frequency"))
yuzhi2 = int(request.form.get("packet"))
# 创建用于计算包数所用的变量们 ~~
cnt1 = 0 #
cnt2 = 0 #
cnt3 = 0 #
cnt4 = 0 #
cnt7788 = 0 # 次数
# 创建用于计算包长所用的变量们 ~~
len1 = 0 #
len2 = 0 #
len3 = 0 #
len4 = 0 #
# 创建列表们 用于作图!
chang = [0] # 包长(顾名思义chang)
shu = [0] # 包数(顾名思义shu哈哈哈哈哈哈哈)
# 分别创建空的字典,保存一个五元组的流量和总长度
dic1 = {} # 长度
dic2 = {} # 次数
# 遍历获得数据
for cnt in range(len(dpkt)):
# 循环次数计数cnt7788
cnt7788 += 1
# 如果说不是IP协议的就pass 2048代表IP协议
if dpkt[cnt][Ether].type != 2048:
continue
# 如果不是TCP和UDP就pass
if dpkt[cnt][IP].proto != 6 and dpkt[cnt][IP].proto != 17:
continue
# 获得协议类型proto,6是TCP,17是UDP
if dpkt[cnt][IP].proto == 6:
proto = "TCP"
if dpkt[cnt][IP].proto == 17:
proto = "UDP"
# 获得IP地址
ip_src = dpkt[cnt][IP].src
ip_dst = dpkt[cnt][IP].dst
# 获得相关端口
sport = dpkt[cnt][proto].sport
dport = dpkt[cnt][proto].dport
# 获取这个包的长度
length = len(dpkt[cnt])
# 格式
tup = (ip_src, sport, ip_dst, dport, proto)
# 获得并计算,提取相关数据dic1、dic2以用于html
getting = dic1.get(tup,0)
dic1[tup] = getting + length # 总长度+该包的长度
dic2[tup] = getting + 1 # 次数+1
# 计算10K~100K的包长&包数相关数据,以用于html
cnt1 += 1
len1 += length
if cnt7788 % 10000 == 0:
cnt2 += 1
chang.append(len1)
shu.append(cnt1)
else:
chang[cnt2] = len1
shu[cnt2] = cnt1
# html相关,Echart.min.js下的柱状图模板,将chang的数据带给柱状图。
bar = (
Bar()
.add_xaxis(["10K","20K","30K","40K","50K","60K","70K","80K","90K","100K"])
.add_yaxis("length", [chang[0],chang[1],chang[2],chang[3],chang[4],chang[5],chang[6],chang[7],chang[8],chang[9]])
.set_global_opts(title_opts=opts.TitleOpts(title="流量监控", subtitle="包长"))
)
# 带变量、device给美丽html
return render_template('beautiful.html', yuzhi1=yuzhi1, yuzhi2=yuzhi, dic1=dic1, dic2=dic2,
bar_options=bar.dump_options())
———————————————
🔺 主要代码(图标&分析异常流)
———————————————
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ikennyooo</title>
<!-- 引入 echarts.js 这里使用flask的url_for-->
<script src="{{ url_for('static', filename='echarts.min.js') }}"></script>
</head>
<body>
<h1>ik的寒假作业w</h1>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="bar" style="width: 700px;height:400px;"></div>
//以下图表是相关模板以及配置项的代码↓
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var barChart = echarts.init(document.getElementById('bar'));
// 使用刚指定的配置项和数据显示图表。
barChart.setOption({{ bar_options | safe }});
</script>
//以上图表是相关模板以及配置项的代码↑
<section>
<div id="right" style="color: cadetblue;width:600px;float:left;"> //美丽靛青
<h1 style="color: black;"> 阈值φ:{{yuzhi1}} 阈值Φ:{{yuzhi2}} 下的异常流</h1>
{% for dic in dic1 %}
{% if dic2[dic]>= yuzhi1 or dic1[dic] >= yuzhi2 %} //如果大于阈值就打印出来
{{dic}}<br>
{% endif %}
{% endfor %}
</div>
</section>
</body>
</html>
② Github链接:Monito-flow
③ 学习历程
-
学习历程坎坎坷坷
-
学习思路:虚拟机抓包→ftp传输至本机→python读取解析抓到的pcap文件→用Flask+html实现数据的互传以及可视化的实现
【ik强推!老师超温柔超可爱讲得超详细】 Pycharm的安装配置介绍、研究flask和ECharts :https://www.bilibili.com/video/BV12E411A7ZQ?p=30 《Python爬虫基础5天速成(2021全新合集)Python入门+数据可视化》
浅学Python[没(kan)看(hen)完(shao)]:https://www.bilibili.com/video/BV1wD4y1o7AS 《花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)》
ECharts官方教程:https://echarts.apache.org/zh/tutorial.html#5 分钟上手 ECharts 《5 分钟上手 ECharts》
CSDN资源: https://blog.csdn.net/weixin_44947339/article/details/103966120 《Echarts各种图表案例(代码+效果)》
知乎资源: https://zhuanlan.zhihu.com/p/109183028 《Pycharm利用Flask展示图表数据》
W3school资源: https://www.w3school.com.cn/python/index.asp 《Python 教程》
ftp相关,杂七杂八的很多,没有找到统一教程。
④ 作业相关Tips
-
对自己本次任务完成所需时间的初步预估
初步预估做不完呜呜呜,中间活动有很多,但是最后ddl果然是生产力,让我紧赶慢赶肝完了。
-
学了啥?
学习了一点点Python,一点点ECharts,一点点html,一点点Flask。
(懒 → 一点点)(对不起对不起对不起) -
遇到的困难与解决方式
1.初步思路是在虚拟机上抓包,然后ftp到本机上。但是在过程中链接的并不是很顺利,用Filezilla在虚拟机和本机传输文件前前后后时间加起来可能研究了有要半天。解决方式:查找资料,不断尝试。最后也不知道是哪一步成功了,就连上了——控制变量没做好,导致“这样我做对了,为什么呢”的现象。
2.抓包的时候,因为等待时间有点长,然后就以为是卡了,很多次没耐心ctrlz取消了,还困了蛮久的。(别笑 哼!)解决方式:问了一下同学抓包要多久,才发现确实要很久,然后浏览网页可以加快很多。
3.写相关算法的时候,实在是没有思路,了解了协议balabala的之后也是没有头绪。解决方法:自己不断调试 & 求助小白马求助欧欧求助zly求助many可爱people。在此感谢!!
4.还有中途出现了网页一直服务器错误的问题,自己苦苦调试无果。后来在小白马的帮助下知道了是后台有应用在卡端口 & IE浏览器插件版本过低。似懂非懂半懂不懂。要好好锻炼自己独立的排查问题能力才行! -
总结以及实际用时以及反思
📕总结:ik作为小白中的小白,要学的还有很多。这次作业完成得并不是很好,制作粗糙、页面简陋。我意识到我算法上面的知识、教程方面的查找、知识面的广度方面都有着很大的欠缺,反省的同时也敦促我要好好学习!
⏰实际用时方面:大概做了五天左右,最主要的战力体现在最后两天。(感叹ddl就是生产力again)
🤔反思:
1.ddl是生产力不差,但也是自己拖延症的体现呜呜呜,我一定要慢慢改掉拖延症!(慢慢改拖延症 噗哈哈哈哈哈哈哈矛盾结合体
2.要多学多看多动手,脚踏实地有耐心。
🌼评估自己的系统的处理效率:
慢成傻子,要一二十秒才能显示出来呜呜呜,不过做出来了很感动
⑤ 感谢大家呜呜呜
感谢小白马大力相助,感谢zly朝夕zxzx提供思路!感谢感谢!不然本小白这么短时间是完不成的!谢谢谢谢!开学请你们喝奶茶(•̀ω•́)y