繁体   English   中英

为什么我的 Ubuntu 在启动 python 脚本后冻结?

[英]Why does my Ubuntu freeze after launching python script?

我写了一个简单的脚本来计算我的网络带宽。 我使用库 scapy 来嗅探所有传入的流量并计算速度。 这是我的代码,嗅探流量:

from time import sleep
from threading import Thread, Event
from scapy.all import *

class Sniffer(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.count_downloaded_bytes = 0

    def run(self):
        sniff(filter="ip", prn=self.get_packet)

    def get_packet(self, packet):
        self.count_downloaded_bytes += len(packet) # calculate size of packets

    def get_count_downloaded_bytes(self):
        count_d_bytes = self.count_downloaded_bytes
        self.count_downloaded_bytes = 0
        return count_d_bytes # returns size of downloaded data in bytes

此代码每 10 秒计算一次带宽(以 Mb/s 为单位)

class NetworkSpeed(Thread):
    def  __init__(self):
        Thread.__init__(self)
        self.sniffer = Sniffer() # create seconds thread, that sniffs traffic
        self.start()

    def calculate_bandwidth(self, count_downloaded_bytes, duration):
        download_speed = (count_downloaded_bytes / 1000000 * 8) / duration
        print('download_speed = ', download_speed)

    def run(self):
        counter = 0
        self.sniffer.start()
        while True:
            if counter == 10:
            self.calculate_bandwidth(self.sniffer.get_count_downloaded_bytes(), 10)
            counter = 0

        counter += 1
        sleep(1)

network_speed = NetworkSpeed()

我知道,代码不是很好,它只是一个原型。 但我有下一个问题:我用 root 权限启动了这个脚本,5 分钟后我的电脑挂了,它开始工作非常缓慢。 这个脚本似乎占用了所有内存。 我怎样才能解决这个问题 ? 因为脚本应该至少工作 1 天。

我认为问题可能出在sniff函数上,尝试调用

def run(self):
    sniff(filter="ip", prn=self.get_packet,store=False)

这样它就不会保存数据包并填满内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM