gpt4 book ai didi

python/scapy RandMAC() 问题

转载 作者:行者123 更新时间:2023-11-28 23:01:46 26 4
gpt4 key购买 nike

我有一个非常烦人的问题,我已经尝试解决了几天。我在网上找不到任何信息。

我尝试自己解决,引用了文档。但没有任何效果。

我的问题是

当我用 RandMAC() 函数分配一个变量 X 时,每次我使用它时 X 应该是相同的。

比如,X = RandMAC(),假设 X 现在是 AA:BB:CC:DD:EE:FF当我打印 3 次 X 时,它应该是这样的。

X = AA:BB:CC:DD:EE:FF  
X = AA:BB:CC:DD:EE:FF
X = AA:BB:CC:DD:EE:FF

但是代码实际做的是

X = AA:BB:CC:DD:EE:FF  
X = 00:0A:0B:0C:0D:0E:0F
X = 11:22:33:44:55:66

所以每次我调用 print X 时它都会改变。

我该如何解决这个问题?

我的代码如下。

from scapy.all import *

X = RandMAC()

print X
print X
print X

提前谢谢大家。

最佳答案

RandMAC 是一个类,当您调用 RandMAC() 时,您得到的是该类的一个实例。 scapy 有很多这样的 RandXXXXX 类,它们都以相同的方式运行:类的实例实际上是一种随机生成器,而不是固定(但随机选择)的东西。在这个例子中,一个 RandMac 是由六个 RandByte 组成的,并且一个 RandByte 每次它的时候都会变成一个从 0 到 255 的随机值要求值。

我认为,这个想法是为了让构建(例如)一个 IP 数据包随机化器变得容易,它为您提供除了为每个数据包随机选择几个字段之外完全相同的 IP 数据包。

因此,无论如何,许多对随机对象的操作都有效地委托(delegate)给了“修复”它们的结果(即选择一个特定的随机值);参见源代码中的volatile.py,类VolatileValue;魔法发生在 __getattr__ 方法中。特别是,这适用于通过 __str__ 进行字符串化,这是 Lycha 观察到的 str() 所做的以及 Karun 观察到的 print 所做的S.

如果你想获得单个随机值,最接近正确方法的可能是调用 _fix 方法:X = RandMAC()._fix()。这恰好与 RandMACstr 相同,但是例如如果你有一个随机整数,那么 _fix 会给你一个实际的整数,而 str 会给你它的字符串表示。

这一切似乎都没有记录在案。不要对它在未来版本中仍然有效进行任何大赌注。 (但是,就其值(value)而言,volatile.py 大约两年没有改变。)

关于python/scapy RandMAC() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10672053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com