最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)網(wǎng)絡(luò)流量監(jiān)控的方法詳解

 更新時間:2026年04月23日 08:59:13   作者:zkic1  
本文主要介紹了一種使用Python和psutil庫在KaliLinux環(huán)境下監(jiān)控網(wǎng)絡(luò)流量的方法,包括接收速率、發(fā)送速率、吞吐量和丟包率的計算,旨在提升網(wǎng)絡(luò)性能和穩(wěn)定性,通過實時監(jiān)控并根據(jù)結(jié)果進行調(diào)整,確保網(wǎng)絡(luò)高效運行,希望對大家有所幫助

一、目的

分析最近一段時間內(nèi)的網(wǎng)絡(luò)流量情況,以便更好地理解網(wǎng)絡(luò)使用情況、識別潛在問題并提出改進建議。網(wǎng)絡(luò)流量監(jiān)控對于保障網(wǎng)絡(luò)穩(wěn)定性、優(yōu)化資源分配和提高性能具有重要意義。

二、監(jiān)控指標(biāo)

1.接收速率

接收速率是指單位時間內(nèi)接收數(shù)據(jù)的速度,通常以 Mbps(兆位每秒)或 KB/s(千字節(jié)每秒)表示。

2.發(fā)送速率

發(fā)送速率是指單位時間內(nèi)發(fā)送數(shù)據(jù)的速度,通常以 Mbps(兆位每秒)或 KB/s(千字節(jié)每秒)表示。

3.吞吐量

吞吐量是指網(wǎng)絡(luò)傳輸數(shù)據(jù)的總量,通常以 Mbps(兆位每秒)或 GB(千兆字節(jié))為單位。

4.丟包率

丟包率是指在傳輸過程中丟失的數(shù)據(jù)包的比例,通常以百分比或千分比表示。

當(dāng)然也根據(jù)自己的需求獲取更加精準(zhǔn)的數(shù)據(jù),以便更好知道自己電腦的網(wǎng)絡(luò)是否安全。

三、實驗環(huán)境

 操作系統(tǒng):kali Linux z 6.5.0-kali3-amd64

語言版本:Python 3.11.8 (main, Feb  7 2024, 21:52:08) [GCC 13.2.0] on linux

四、功能實現(xiàn)

具體的思路如下:

1. 必要用到的庫:我們使用psutil庫來獲取網(wǎng)絡(luò)流量和系統(tǒng)信息,使用imet庫來計算時間間隔。

2. 設(shè)置初始值:記錄開始時間、初始接收字節(jié)數(shù)、初始發(fā)送字節(jié)數(shù)以及初始丟包數(shù)。

3. 進入監(jiān)控循環(huán):使用`while True`進入一個無限循環(huán),每次循環(huán)都會執(zhí)行以下步驟:

  • 休眠一段時間:使用`time.sleep(interval)`來控制每次循環(huán)之間的時間間隔。
  • 獲取當(dāng)前的網(wǎng)絡(luò)流量情況:使用`psutil.net_io_counters()`來獲取當(dāng)前的網(wǎng)絡(luò)輸入輸出計數(shù)器。
  • 計算流量指標(biāo):計算從開始時間到當(dāng)前時間的時間間隔,然后根據(jù)時間間隔計算接收速率、發(fā)送速率和吞吐量。同時,計算丟包率(100個包)。
  • 打印監(jiān)控指標(biāo):使用`print`函數(shù)打印出接收速率、發(fā)送速率、吞吐量和丟包率。
  • 更新初始值:將當(dāng)前的接收字節(jié)數(shù)、發(fā)送字節(jié)數(shù)和丟包數(shù)更新為下一次循環(huán)的初始值。

4. 主程序入口:使用monitor_network_traffic()來確保腳本在直接運行時才執(zhí)行監(jiān)控函數(shù)。

#安裝pip pip是安裝python的第三方庫 
apt-get install python3-pip
pip install psutil   //安裝第三方庫
具體代碼 : 
   import psutil
   import time
def monitor_network_traffic(interval=1):
    start_time = time.time()
    start_io = psutil.net_io_counters()
    start_rx = start_io.bytes_recv
    start_tx = start_io.bytes_sent
    start_drop = start_io.dropin  # 接收端的丟包數(shù)
    while True:
        time.sleep(interval)
        end_io = psutil.net_io_counters()
        end_rx = end_io.bytes_recv
        end_tx = end_io.bytes_sent
        end_drop = end_io.dropin  # 接收端的丟包數(shù)
        duration = time.time() - start_time
        rx_speed = (end_rx - start_rx) / duration
        tx_speed = (end_tx - start_tx) / duration
        packet_loss = (end_drop - start_drop) / 100  # 丟包率(100包)
        print(f"每秒接收速率: {rx_speed:.2f} bytes/s")
        print(f"每秒發(fā)送速率: {tx_speed:.2f} bytes/s")
        print(f"吞吐量: {(rx_speed + tx_speed):.2f} bytes/s")
        print(f"丟包率(100包): {packet_loss:.2%}")
        start_rx = end_rx
        start_tx = end_tx
        start_drop = end_drop
monitor_network_traffic()

五、方法補充

網(wǎng)絡(luò)流量監(jiān)控是系統(tǒng)運維、安全分析和應(yīng)用調(diào)試的重要手段。Python 憑借豐富的第三方庫,可以靈活實現(xiàn)從系統(tǒng)級統(tǒng)計到數(shù)據(jù)包級別的深度分析。本文將介紹四種主流的實現(xiàn)方法,并給出完整的代碼示例和適用場景。

1.使用 psutil 獲取系統(tǒng)網(wǎng)絡(luò) I/O 統(tǒng)計

適用場景:實時監(jiān)控本機網(wǎng)絡(luò)流量總量(上傳/下載速度、累計字節(jié)數(shù)),無需解析數(shù)據(jù)包內(nèi)容。

原理psutil 讀取 /proc/net/dev(Linux)或性能計數(shù)器(Windows),返回每個網(wǎng)卡的累計收發(fā)字節(jié)數(shù)、包數(shù)等。

安裝

pip install psutil

示例代碼:實時顯示所有網(wǎng)卡的流量速率

import psutil
import time
def get_net_io():
    """獲取網(wǎng)絡(luò)I/O統(tǒng)計"""
    net_io = psutil.net_io_counters(pernic=True)
    return net_io
def format_speed(bytes_per_sec):
    """將字節(jié)/秒格式化為可讀單位"""
    for unit in ['B', 'KB', 'MB', 'GB']:
        if bytes_per_sec < 1024:
            return f"{bytes_per_sec:.2f} {unit}/s"
        bytes_per_sec /= 1024
    return f"{bytes_per_sec:.2f} TB/s"
def monitor_bandwidth(interval=1):
    """監(jiān)控各網(wǎng)卡的實時帶寬"""
    print("開始監(jiān)控網(wǎng)絡(luò)流量 (按 Ctrl+C 停止)...")
    prev = get_net_io()
    try:
        while True:
            time.sleep(interval)
            curr = get_net_io()
            for nic, curr_stats in curr.items():
                prev_stats = prev.get(nic)
                if not prev_stats:
                    continue
                sent_rate = (curr_stats.bytes_sent - prev_stats.bytes_sent) / interval
                recv_rate = (curr_stats.bytes_recv - prev_stats.bytes_recv) / interval
                print(f"{nic}: 上傳 {format_speed(sent_rate)} | 下載 {format_speed(recv_rate)}")
            prev = curr
    except KeyboardInterrupt:
        print("\n監(jiān)控結(jié)束")
if __name__ == "__main__":
    monitor_bandwidth()

關(guān)鍵點

  • psutil.net_io_counters(pernic=True) 返回字典,鍵為網(wǎng)卡名,值為 snetio 對象。
  • 計算差值除以時間間隔即得實時速率。
  • 無需管理員權(quán)限,輕量級,適合后臺常駐監(jiān)控。

2.使用 scapy 捕獲并分析數(shù)據(jù)包

適用場景:需要解析數(shù)據(jù)包頭部(如 IP、TCP、HTTP)、進行協(xié)議分析或自定義過濾。

原理scapy 可以工作在用戶態(tài),利用 pcap 或 socket 抓取鏈路層或網(wǎng)絡(luò)層數(shù)據(jù)包,并提供強大的協(xié)議解析能力。

安裝

pip install scapy

注意:在 Linux 下抓包可能需要 sudo 權(quán)限;Windows 需要安裝 Npcap 或 WinPcap。

示例代碼:捕獲并統(tǒng)計 HTTP 請求

from scapy.all import sniff, IP, TCP, Raw
def packet_callback(packet):
    """回調(diào)函數(shù),處理每個捕獲的數(shù)據(jù)包"""
    if IP in packet and TCP in packet:
        tcp = packet[TCP]
        # 檢查是否是 HTTP 請求(端口 80 或 8080)
        if tcp.dport in [80, 8080] or tcp.sport in [80, 8080]:
            if Raw in packet:
                payload = packet[Raw].load.decode('utf-8', errors='ignore')
                # 簡單判斷是否為 HTTP 請求行
                if payload.startswith('GET') or payload.startswith('POST'):
                    print(f"HTTP請求: {payload[:100]}...")
                    print(f"源IP: {packet[IP].src}:{tcp.sport} -> 目標(biāo)IP: {packet[IP].dst}:{tcp.dport}")
# 開始抓包(捕獲 100 個數(shù)據(jù)包,過濾 HTTP 流量)
sniff(filter="tcp port 80 or tcp port 8080", prn=packet_callback, count=100)

關(guān)鍵點

  • sniff 函數(shù)的 filter 參數(shù)使用 Berkeley Packet Filter (BPF) 語法,可以精確控制抓包范圍,避免過多無關(guān)數(shù)據(jù)。
  • 回調(diào)函數(shù)中對 Raw 層的內(nèi)容進行解析,可提取應(yīng)用層數(shù)據(jù)。
  • 需要管理員/root 權(quán)限。

3.使用 pyshark 解析 PCAP 文件(離線分析)

適用場景:已有抓包文件(如 Wireshark 保存的 .pcap),需要自動化分析或提取特征。

原理pyshark 是 Wireshark 的 Python 封裝,利用 tshark 命令行解析 PCAP 文件,返回結(jié)構(gòu)化的數(shù)據(jù)包對象。

安裝

pip install pyshark

示例代碼:統(tǒng)計 PCAP 文件中的 TCP 連接

import pyshark
def analyze_pcap(pcap_file):
    cap = pyshark.FileCapture(pcap_file, display_filter="tcp")
    connections = set()
    for packet in cap:
        try:
            src = packet.ip.src
            dst = packet.ip.dst
            sport = packet.tcp.srcport
            dport = packet.tcp.dstport
            connections.add((src, sport, dst, dport))
        except AttributeError:
            continue
    cap.close()
    print(f"共發(fā)現(xiàn) {len(connections)} 個 TCP 連接")
    for conn in list(connections)[:10]:
        print(f"{conn[0]}:{conn[1]} -> {conn[2]}:{conn[3]}")
if __name__ == "__main__":
    analyze_pcap("capture.pcap")

關(guān)鍵點

  • FileCapture 支持實時捕獲(使用 LiveCapture)和離線文件。
  • 可以設(shè)置 display_filter 為 Wireshark 過濾語法,如 "tcp.port == 443"。
  • 需要系統(tǒng)安裝 Wireshark(包含 tshark)。

4.使用 pydivert(Windows)進行流量攔截和修改

適用場景:在 Windows 上實現(xiàn)類似防火墻的實時攔截、重定向或修改數(shù)據(jù)包內(nèi)容。

原理pydivert 封裝了 Windows 的 WinDivert 驅(qū)動,可以捕獲、過濾、修改和重新注入網(wǎng)絡(luò)數(shù)據(jù)包。

安裝

pip install pydivert

示例代碼:記錄所有訪問 80 端口的流量并阻止

import pydivert
def block_http():
    with pydivert.WinDivert("tcp.DstPort == 80 or tcp.SrcPort == 80") as w:
        print("開始監(jiān)控并阻止 HTTP 流量...")
        for packet in w:
            print(f"攔截數(shù)據(jù)包: {packet.src_addr}:{packet.src_port} -> {packet.dst_addr}:{packet.dst_port}")
            # 直接丟棄數(shù)據(jù)包(不調(diào)用 packet.send())
            # 若想放行,則調(diào)用 w.send(packet)
        # 循環(huán)持續(xù)直到進程終止
if __name__ == "__main__":
    block_http()

關(guān)鍵點

  • 必須以管理員身份運行腳本。
  • WinDivert 驅(qū)動需預(yù)先安裝(pydivert 安裝時會提示或自動下載)。
  • 支持 x64 和 x86 系統(tǒng)。

六、總結(jié)

網(wǎng)絡(luò)流量監(jiān)控對于維護網(wǎng)絡(luò)穩(wěn)定性、提高性能和優(yōu)化資源分配具有重要意義。定期進行網(wǎng)絡(luò)流量監(jiān)控,并根據(jù)監(jiān)控結(jié)果進行相應(yīng)的優(yōu)化和調(diào)整,以確保網(wǎng)絡(luò)的高效運行

到此這篇關(guān)于基于Python實現(xiàn)網(wǎng)絡(luò)流量監(jiān)控的方法詳解的文章就介紹到這了,更多相關(guān)Python網(wǎng)絡(luò)流量監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python flask sqlalchemy連接數(shù)據(jù)庫流程介紹

    python flask sqlalchemy連接數(shù)據(jù)庫流程介紹

    這篇文章主要介紹了python flask sqlalchemy連接數(shù)據(jù)庫流程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Python?ChineseCalendar包主要類和方法詳解

    Python?ChineseCalendar包主要類和方法詳解

    ChineseCalendar?是一個?Python?包,用于獲取中國傳統(tǒng)日歷信息。這個包提供了中國農(nóng)歷、二十四節(jié)氣、傳統(tǒng)節(jié)日、黃歷等信息,這篇文章主要介紹了Python?ChineseCalendar包簡介,需要的朋友可以參考下
    2023-03-03
  • jupyter notebook中新建cell的方法與快捷鍵操作

    jupyter notebook中新建cell的方法與快捷鍵操作

    這篇文章主要介紹了jupyter notebook中新建cell的方法與快捷鍵操作,具有很好的參考價值,希望對有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python中的len()函數(shù)是什么意思

    Python中的len()函數(shù)是什么意思

    這篇文章主要介紹了Python中的len()函數(shù)是什么意思以及l(fā)en()函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 回歸預(yù)測分析python數(shù)據(jù)化運營線性回歸總結(jié)

    回歸預(yù)測分析python數(shù)據(jù)化運營線性回歸總結(jié)

    本文主要介紹了python數(shù)據(jù)化運營中的線性回歸一般應(yīng)用場景,常用方法,回歸實現(xiàn),回歸評估指標(biāo),效果可視化等,并采用了回歸預(yù)測分析的數(shù)據(jù)預(yù)測方法
    2021-08-08
  • 對pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解

    對pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解

    今天小編就為大家分享一篇對pandas中iloc,loc取數(shù)據(jù)差別及按條件取值的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖

    使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖

    Matplotlib是Python的繪圖庫, 它可與NumPy一起使用,提供了一種有效的MatLab開源替代方案,下面這篇文章主要給大家介紹了關(guān)于使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python游戲開發(fā)之魔塔小游戲的實現(xiàn)

    Python游戲開發(fā)之魔塔小游戲的實現(xiàn)

    魔塔小游戲作為一款角色扮演RPG小游戲,一直深受大家的喜愛。本文將利用Python的cpgames模塊制作這一經(jīng)典小游戲,感興趣的可以跟隨小編一起動手試一試
    2022-02-02
  • Python3.7基于hashlib和Crypto實現(xiàn)加簽驗簽功能(實例代碼)

    Python3.7基于hashlib和Crypto實現(xiàn)加簽驗簽功能(實例代碼)

    這篇文章主要介紹了Python3.7基于hashlib和Crypto實現(xiàn)加簽驗簽功能,環(huán)境是基于python3.7,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 使用pth文件添加Python環(huán)境變量方式

    使用pth文件添加Python環(huán)境變量方式

    這篇文章主要介紹了使用pth文件添加Python環(huán)境變量方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論

丰台区| 罗甸县| 富民县| 洞口县| 崇明县| 西吉县| 阿荣旗| 尚义县| 临潭县| 扎赉特旗| 那坡县| 洛川县| 庄河市| 阿克| 耿马| 达州市| 武冈市| 南靖县| 区。| 高台县| 镇雄县| 保康县| 铜鼓县| 吉木萨尔县| 沂水县| 吉林省| 寻乌县| 东港市| 托克逊县| 本溪| 紫云| 星座| 潜江市| 莆田市| 栾川县| 道真| 台湾省| 海口市| 四川省| 六安市| 黎城县|