python/scapy RandMAC()问题

python/scapy RandMAC()问题,python,scapy,Python,Scapy,我有一个非常烦人的问题,我试着解决了几天。 我在网上找不到任何信息 我试图自己解决这个问题,查阅了文献资料。 但什么都不管用 我的问题是 当我用RandMAC函数分配变量X时,每次使用它时,X应该是相同的 比如,X=RandMAC,假设X现在是AA:BB:CC:DD:EE:FF 当我打印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:

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

我试图自己解决这个问题,查阅了文献资料。 但什么都不管用

我的问题是

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

比如,X=RandMAC,假设X现在是AA:BB:CC:DD:EE:FF 当我打印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是否有其他方法可以做到这一点,但您可以将X转换为字符串,这样它将保持不变。在代码中,X实际上每次都调用一个函数

X = str(RandMAC())
print X
print X
print X
我不知道RandMac是否有其他方法可以做到这一点,但是你可以将X转换成字符串,这样它就不会改变。在代码中,X实际上每次都调用一个函数

X = str(RandMAC())
print X
print X
print X
RandMAC是一个类,当您调用RandMAC时,您得到的是该类的一个实例。scapy有很多这样的RandXXXXX类,它们的行为都是一样的:类的实例实际上是一种随机事件生成器,不是固定的而是随机选择的事件。在本例中,RandMac由六个RandByte组成,每次请求RandByte的值时,RandByte都会转换为0到255之间的随机值

我认为,这样做的目的是使其易于构建,例如,一个IP数据包随机化器,它为您提供的IP数据包都是相同的,只是每个数据包随机选择了几个字段

因此,不管怎样,对随机对象的许多操作都有效地委托给修复它们的结果,即拾取特定的随机值;请参阅源代码中的volatile.py类VolatileValue;神奇发生在_getattr__方法中。特别是,这适用于通过_str__进行串接,这是由Lycha观察到的str所做的,也是由Karun S观察到的print所做的

如果你想得到一个随机值,最接近正确的方法可能是调用_fix方法:X=RandMAC.\u fix。这恰好与RandMAC的str相同,但例如,如果您有一个随机整数,则_fix将为您提供一个实际整数,而str将为您提供其字符串表示形式

所有这些似乎都没有记录在案。不要对它在未来版本中仍能正常工作下大赌注。但是,无论如何,volatile.py已经有两年没有改变了。

RandMAC是一个类,当你调用RandMAC时,你得到的是该类的一个实例。scapy有很多这样的RandXXXXX类,它们的行为都是一样的:类的实例实际上是一种随机事件生成器,不是固定的而是随机选择的事件。在本例中,RandMac由六个RandByte组成,每次请求RandByte的值时,RandByte都会转换为0到255之间的随机值

我认为,这样做的目的是使其易于构建,例如,一个IP数据包随机化器,它为您提供的IP数据包都是相同的,只是每个数据包随机选择了几个字段

因此,不管怎样,对随机对象的许多操作都有效地委托给修复它们的结果,即拾取特定的随机值;请参阅源代码中的volatile.py类VolatileValue;神奇发生在_getattr__方法中。特别是,这适用于通过_str__进行串接,这是由Lycha观察到的str所做的,也是由Karun S观察到的print所做的

如果你想得到一个随机值,最接近正确的方法可能是调用_fix方法:X=RandMAC.\u fix。这恰好与RandMAC的str相同,但例如,如果您有一个随机整数,则_fix将为您提供一个实际整数,而str将为您提供其字符串表示形式


所有这些似乎都没有记录在案。不要对它在未来版本中仍能正常工作下大赌注。但是,无论如何,volatile.py已经有两年没变了。

非常感谢你,Gareth。我真的很感谢你的回答。非常感谢你,加雷斯。我真的很感谢你的回答。