网络流量分析

网络流量分析网络流量分析具体要求收集自己本机的网络流量数据(至少1小时)并进行数据显示。可用wireshark软件抓包网络流量大小的时序图,可按每半分钟、每分钟、每五分钟、每十分钟进行分别显示。流量协议类型直方图可设置过滤条件,显示指定协议数据包、显示时间段数据包、显示长度范围内的数据包提示:由于代码导入pyshark模块,注意wireshark安装路径为C盘programfils文件夹下,…

大家好,又见面了,我是你们的朋友全栈君。

网络流量分析

具体要求

  • 收集自己本机的网络流量数据(至少1小时)并进行数据显示。
  • 可用wireshark软件抓包
  • 网络流量大小的时序图,可按每半分钟、每分钟、每五分钟、每十分钟进行分别显示。
  • 流量协议类型直方图
  • 可设置过滤条件,显示指定协议数据包、显示时间段数据包、显示长度范围内的数据包
  • 提示:由于代码导入pyshark模块,注意wireshark安装路径为C盘programfils 文件夹下,否则无法运行。

具体思路

  • 要想对数据进行分析,首先要有数据,所以第一步要抓取数据
  • 抓取数据我所知道的有两种方法,第一种为通过代码进行抓取,然后保存在文件中进行读取,第二种通过wireshark等软件进行抓取,然后通过代码分析。
  • 前者更倾向于分析实时数据包,后者则耗时间比较少(具体根据需要选择)
  • 拿到数据包以后,在分析之前,我们要通过代码把数据包中的内容拿出来,我选择pyshark.FileCapture方法
  • 作图我选择导入matplotlib模块,作图会方便很多
  • 具体的分析过程是一些简单的选择结构(ps:不懂得可以看一下Python基础篇)

python代码实现

# -*- coding: utf-8 -*-
import pyshark
from scapy.all import *
import matplotlib.pyplot as plt

# 读取pcap文件
packets = pyshark.FileCapture("./net_package.pcap")


def protocal(packets):
    """
    制作流量协议类型直方图
    :param packets: 读取的pcap文件数据
    """
    # 新建空字典
    dict = {}
    for packet in packets:
        if packet.highest_layer not in dict.keys():
            dict[packet.highest_layer] = 1
        else:
            dict[packet.highest_layer] += 1
    # print(dict)
    keys = dict.keys()
    values = dict.values()
    plt.figure(figsize=(8, 20), dpi=80)
    plt.bar(keys, values)
    plt.xticks(rotation=45)
    plt.xlabel('protocal')
    plt.ylabel('amount')
    plt.title('the amounts of all protocals')
    plt.show()


# print(proto_sum)
def graph_size(packets):
    """
    作流量大小时序图
    :param packets: 读取的pcap文件数据
    """
    time_stamps = []
    print("正在统计中。。。")
    for packet in packets:
        # print(int(float(packet.sniff_timestamp)))
        time_stamps.append(int(float(packet.sniff_timestamp)))
    # print(time_stamps)
    print("统计完成!")
    d = int(float(input("请输入时间间隔(单位:分钟):")) * 60)
    # d = 30 #半分钟
    num_bins = (max(time_stamps) - min(time_stamps)) // d
    step = len(time_stamps) // num_bins
    time_labels = [time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(i)) for i in time_stamps[::step]]
    # 新建20*8英寸图形,分辨率为80
    plt.figure(figsize=(20, 8), dpi=80)
    # X轴分布数据以及num_bins条柱状图
    plt.hist(time_stamps, num_bins)
    # 标签旋转角度45
    plt.xticks(range(min(time_stamps), max(time_stamps) + d, d), time_labels, rotation=45)
    # plt.xticks(range(min(time_stamps),max(time_stamps)+d,d),rotation = 45)
    plt.xlabel("timestamp")
    plt.ylabel("amount")
    plt.title("amount of per " + str(d) + " s")
    plt.show()


def filter(packets):
    """
    显示过滤器
    :param packets: 读取的pcap文件数据
    """

    protocal = input("请输入协议类型:")
    begin_time = input("请输入开始时间(Example:2019-09-09 10:58:42):")
    end_time = input("请输入结束时间(Example:2019-09-09 11:40:00):")
    length = int(input("请输入最大长度限制(单位:字节):"))
    # time.strptime把固定格式时间转换为时间元组
    array_begin_time = time.strptime(begin_time, "%Y-%m-%d %H:%M:%S")
    # time.mktime把时间元组转换为以秒表示的时间
    begin_time_stamp = float(time.mktime(array_begin_time))
    # print("begin_time_stamp:"+str(begin_time_stamp))
    array_end_time = time.strptime(end_time, "%Y-%m-%d %H:%M:%S")
    end_time_stamp = float(time.mktime(array_end_time))
    # print("end_time_stamp:"+str(end_time_stamp))
    packlist = []
    for packet in packets:
        # sniff_timestamp获取开始嗅探的时间戳
        time_stamp = float(packet.sniff_timestamp)
        # 获取数据包的捕获长度
        size = float(packet.captured_length)
        if packet.highest_layer == protocal and time_stamp > begin_time_stamp and time_stamp < end_time_stamp and size <= length:
            print(packet)
            packlist.append(packet)
    print("过滤出的数据包个数为 %s" % len(packlist))


# 调用函数进行操作

protocal(packets)
graph_size(packets)
filter(packets)


  • 需要提前抓好数据包,在代码中进行读取,然后进行分析。
  • 由于数据包较大,程序运行时间可能较长。

运行结果展示

  • 流量协议类型直方图
    在这里插入图片描述

  • 作流量大小时序图
    在这里插入图片描述
    在这里插入图片描述

  • 过滤器
  • 按照控制台提示输入过滤条件
    在这里插入图片描述

  • 最后会输出符合条件的数据包数量
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130923.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java指定长度数组长度_Java声明数组时不能指定其长度[通俗易懂]

    java指定长度数组长度_Java声明数组时不能指定其长度[通俗易懂]声明数组平均折旧法包括长度TheFirstFoliowaspublishedafterthedeathofW.Shakespeare.声明数组W.Shakespearemightbeinfluencedby______inwritingHamlet.长度______areW.Shakespeare’sgreattragedies.声明数组Hamlet…

    2022年6月2日
    34
  • php递归算法计算n 介乘,递归算法示例——计算N的阶乘「建议收藏」

    php递归算法计算n 介乘,递归算法示例——计算N的阶乘「建议收藏」递归算法,也就是调用方法自身。阶乘算法,N的阶乘为N*(N-1)*…*2*1,1的阶乘是1。下面是示例的代码:packagecom.cqit.edu.test;importjava.util.Scanner;/***@author肖德俊*@versionDec9,20086:02:55PM*/publicclassUseself{/***@paramargs*/pub…

    2022年8月11日
    4
  • Cooley-Tukey算法 (蝶形算法)

    Cooley-Tukey算法 (蝶形算法)

    2021年12月2日
    65
  • 如何测试网站打开速度(网站访问速度)

    检测网站打开速度的5个方法网页载入速度对于一个网站来讲很关键,Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中,也就是说如果你的网站有足够的内容,而且载入速度比别人的网站更快一步的话,那么你就是获得更好的排名。那么下面就赶快测试你的网站,提高网站访问速度吧。1:用Ping命令简单测网站速度的方法Ping可以用来检查网络是否通畅或者网络连接速度,点击开始→运行在运行中输…

    2022年4月18日
    144
  • 计算机插了网线缺连不了网络,网线连不上网怎么回事_为什么网线插电脑上不了网-win7之家…

    计算机插了网线缺连不了网络,网线连不上网怎么回事_为什么网线插电脑上不了网-win7之家…当我们在使用有线网络的时候,都需要在电脑中插入网线才可以,但是有不少用户却遇到网线连不上网的情况,为什么网线插电脑上不了网呢?导致这样问题的原因有很多,为了帮助到大家,现在给大家讲解一下网线连不上网的几种解决方法,一起来看看吧。具体步骤如下:1、电脑插上网线却连不上网首先可能是网线接触不良导致的,可以将网线的两端拔下来重新连接再试试看能不能连上网,或者查看一下网线有无破损,将网线放在其他电脑上连接…

    2022年6月26日
    36
  • 项目管理第五章项目范围管理内容_项目范围管理在规划过程组四个模块

    项目管理第五章项目范围管理内容_项目范围管理在规划过程组四个模块项目管理第五章项目范围管理项目范围管理:范围管理确保项目做且只做所需的工作,项目范围管理过程包括:规划范围管理:为记录如何定义、确认和控制项目范围及产品范围,而创建范围管理计划的过程。收集需求:为实现项目目标而确定、记录并管理相关方的需要和需求的过程。定义范围:制定项目和产品详细描述的过程。创建WBS:将可交付成果和工作分解为较小、易于管理的组建过程。确认范围:正式验收已完成的项目可交付成果的过程。控制范围:监督项目和产品的范围状态管理范围基准变更的过程。范围管理的核心理念:

    2022年9月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号