日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

网络流量分析(在线网络测速)

發(fā)布時(shí)間:2023/12/24 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 网络流量分析(在线网络测速) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

網(wǎng)絡(luò)流量分析

具體要求

  • 收集自己本機(jī)的網(wǎng)絡(luò)流量數(shù)據(jù)(至少1小時(shí))并進(jìn)行數(shù)據(jù)顯示。
  • 可用wireshark軟件抓包
  • 網(wǎng)絡(luò)流量大小的時(shí)序圖,可按每半分鐘、每分鐘、每五分鐘、每十分鐘進(jìn)行分別顯示。
  • 流量協(xié)議類型直方圖
  • 可設(shè)置過濾條件,顯示指定協(xié)議數(shù)據(jù)包、顯示時(shí)間段數(shù)據(jù)包、顯示長度范圍內(nèi)的數(shù)據(jù)包
  • 提示:由于代碼導(dǎo)入pyshark模塊,注意wireshark安裝路徑為C盤programfils 文件夾下,否則無法運(yùn)行。

具體思路

  • 要想對(duì)數(shù)據(jù)進(jìn)行分析,首先要有數(shù)據(jù),所以第一步要抓取數(shù)據(jù)
  • 抓取數(shù)據(jù)我所知道的有兩種方法,第一種為通過代碼進(jìn)行抓取,然后保存在文件中進(jìn)行讀取,第二種通過wireshark等軟件進(jìn)行抓取,然后通過代碼分析。
  • 前者更傾向于分析實(shí)時(shí)數(shù)據(jù)包,后者則耗時(shí)間比較少(具體根據(jù)需要選擇)
  • 拿到數(shù)據(jù)包以后,在分析之前,我們要通過代碼把數(shù)據(jù)包中的內(nèi)容拿出來,我選擇pyshark.FileCapture方法
  • 作圖我選擇導(dǎo)入matplotlib模塊,作圖會(huì)方便很多
  • 具體的分析過程是一些簡單的選擇結(jié)構(gòu)(ps:不懂得可以看一下Python基礎(chǔ)篇)

python代碼實(shí)現(xiàn)

# -*- coding: utf-8 -*-
import pyshark
from scapy.all import *
import matplotlib.pyplot as plt
# 讀取pcap文件
packets = pyshark.FileCapture("./net_package.pcap")
def protocal(packets):
"""
制作流量協(xié)議類型直方圖
:param packets: 讀取的pcap文件數(shù)據(jù)
"""
# 新建空字典
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):
"""
作流量大小時(shí)序圖
:param packets: 讀取的pcap文件數(shù)據(jù)
"""
time_stamps = []
print("正在統(tǒng)計(jì)中。。。")
for packet in packets:
# print(int(float(packet.sniff_timestamp)))
time_stamps.append(int(float(packet.sniff_timestamp)))
# print(time_stamps)
print("統(tǒng)計(jì)完成!")
d = int(float(input("請(qǐng)輸入時(shí)間間隔(單位:分鐘):")) * 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軸分布數(shù)據(jù)以及num_bins條柱狀圖
plt.hist(time_stamps, num_bins)
# 標(biāo)簽旋轉(zhuǎn)角度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文件數(shù)據(jù)
"""
protocal = input("請(qǐng)輸入?yún)f(xié)議類型:")
begin_time = input("請(qǐng)輸入開始時(shí)間(Example:2019-09-09 10:58:42):")
end_time = input("請(qǐng)輸入結(jié)束時(shí)間(Example:2019-09-09 11:40:00):")
length = int(input("請(qǐng)輸入最大長度限制(單位:字節(jié)):"))
# time.strptime把固定格式時(shí)間轉(zhuǎn)換為時(shí)間元組
array_begin_time = time.strptime(begin_time, "%Y-%m-%d %H:%M:%S")
# time.mktime把時(shí)間元組轉(zhuǎn)換為以秒表示的時(shí)間
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獲取開始嗅探的時(shí)間戳
time_stamp = float(packet.sniff_timestamp)
# 獲取數(shù)據(jù)包的捕獲長度
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("過濾出的數(shù)據(jù)包個(gè)數(shù)為 %s" % len(packlist))
# 調(diào)用函數(shù)進(jìn)行操作
protocal(packets)
graph_size(packets)
filter(packets)

  • 需要提前抓好數(shù)據(jù)包,在代碼中進(jìn)行讀取,然后進(jìn)行分析。
  • 由于數(shù)據(jù)包較大,程序運(yùn)行時(shí)間可能較長。

運(yùn)行結(jié)果展示

  • 流量協(xié)議類型直方圖

  • 作流量大小時(shí)序圖


  • 過濾器
  • 按照控制臺(tái)提示輸入過濾條件

  • 最后會(huì)輸出符合條件的數(shù)據(jù)包數(shù)量

總結(jié)

以上是生活随笔為你收集整理的网络流量分析(在线网络测速)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。