yolo03 2023-11-17 21:13 采纳率: 0%
浏览 3

SDN网络流量统计代码问题

这段代码前面两行是导入Mytopo.py和construction.py文件,但是在终端运行的时候什么结果都没看见,construction.py的功能是构造数据包并以.pcap文件的形式存在目录w下面,但是我看了w目录发现里面一个构造成功的数据包也没有,所以代码好像从第一行就没运行,有没有好心人知道是怎么回事啊


import Mytopo
import construction
from scapy.all import *  
from collections import defaultdict 
import os 
from scapy.all import rdpcap

class CountMinSketch: 
    def __init__(self, w, d): 
        self.w = w  
        self.d = d 
        self.tables = [defaultdict(int) for _ in range(w)]  # 创建包含w个默认字典的列表,每个字典的默认值为0

    def add(self, item):  # 添加元素
        for table in self.tables:  # 遍历每个表
            h = hash(item) % (1 << self.d)  # 计算哈希值h,取模2^d
            table[h] += 1 

    def estimate(self, item):
        min_estimate = float('inf')  # 初始化为正无穷大
        for table in self.tables:
            h = hash(item) % (1 << self.d)
            if table[h] < min_estimate: 
                min_estimate = table[h]
        return min_estimate 

def process_packet(packet, sketch):  # 处理数据包
    key = (packet['Source'],packet['Destination'],packet['Src Port'], packet['Dst Port'], packet['Protocol'])  # 五元组作为键
    sketch.add(key)
    return sketch

if __name__ == "__main__":
    w = 10
    d = 5
    sketch = CountMinSketch(w, d)
    
    # 获取目录work下的所有文件名
    file_list = os.listdir("w")
    packets = []

    for file_name in file_list:
        if file_name.endswith(".pcap"):
            packets_temp=rdpcap(os.path.join("w",file_name))
            packets.extend(packets_temp)

    for packet in packets:
        sketch = process_packet(packet, sketch) 

    for key in sketch.tables[0]:
        print(f"{key}: {sketch.estimate(key)}")

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-18 08:52
    关注

    【以下回答由 GPT 生成】

    回答:

    1. 是的,我在终端运行代码时按照如下格式运行:
    python your_filename.py
    
    1. 我会确保 Mytopo.pyconstruction.py 这两个文件存在于同一目录下,并且会检查它们的文件名是否有错别字或大小写错误。

    2. 对于 construction.py 中构造数据包并以 .pcap 文件形式存在目录 w 下的功能是否正确实现了,我会确认一下 w 目录是否存在,并且是否具有写入权限。

    3. 如果问题还没有解决,我会尝试在代码的第一行添加以下语句,以获取更多的运行信息:

    from scapy.all import conf
    conf.verb = 3
    

    这样将会输出更详细的信息,帮助我定位代码中可能出现的问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月17日

悬赏问题

  • ¥15 大二软件工程基础大题
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数