磕磕碰碰做完的寒假作业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

③ 学习历程

④ 作业相关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

posted @ 2021-02-10 00:20  不睡觉变灯泡  阅读(196)  评论(4编辑  收藏  举报