首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Ubuntu在启动python脚本后会死机?

为什么我的Ubuntu在启动python脚本后会死机?
EN

Stack Overflow用户
提问于 2019-01-07 03:53:25
回答 1查看 247关注 0票数 1

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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天。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 05:03:29

我认为问题可能出在sniff函数中,请尝试使用

代码语言:javascript
复制
def run(self):
    sniff(filter="ip", prn=self.get_packet,store=False)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54065339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档