Pregunta

Tengo un problema realmente molesto que traté de resolver para un par de días.No puedo encontrar ninguna información en la red.

Traté de resolver yo mismo, consultó con la documentación.Pero nada funciona.

Mi problema es

Cuando me asignar una variable X con RandMAC() la función, X debe ser el mismo cada vez que lo use.

Como, X = RandMAC(), y vamos a decir X es ahora AA:BB:CC:DD:EE:FF y cuándo puedo imprimir X 3 veces, debería ser algo como esto.

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

Pero lo que el código hace en realidad es

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

Así que cambia cada vez que me llaman de impresión X.

¿Cómo puedo solucionar este problema ?

Mi código es como sigue.

from scapy.all import *

X = RandMAC()

print X
print X
print X

Gracias a todos de antemano.

¿Fue útil?

Solución

RandMAC es una clase, y cuando llame RandMAC() lo que se obtiene es una instancia de esa clase. scapy tiene un montón de estos RandXXXXX clases, y todos ellos se comportan de la misma manera:una instancia de la clase, es una especie de azar-cosa-generador, no es un fijo (pero elegidos al azar) de la cosa.En este caso, un RandMac con la construcción de seis RandBytes, y un RandByte se convierte en un valor aleatorio de 0 a 255 cada vez que su valor se le pide.

La idea, creo, es hacer que sea fácil de construir (por ejemplo) un paquete IP aleatorizador que le da los paquetes IP que son todos el mismo, salvo que un par de campos son escogidos al azar por cada paquete.

Así que, de todos modos, muchas de las operaciones al azar de la cosa objetos que efectivamente son delegadas a los resultados de la "fijación" de ellos (es decir, escoger un determinado valor aleatorio);ver volatile.py en el código fuente de la clase VolatileValue;la magia sucede en el __getattr__ método.En particular, esto se aplica a stringifying a través de __str__, que es lo que str() ¿como se observa en la Lycha y lo print ¿como se observa en la Karun S.

Si desea obtener un único valor aleatorio, lo más cercano a la Manera Correcta es probablemente para llamar la _fix método: X = RandMAC()._fix().Que pasa a ser el mismo str para RandMAC, pero, por ejemplo,si usted tiene un entero aleatorio, a continuación, _fix le dará un real entero mientras str le dará su representación de cadena.

Nada de esto parece ser documentado.No hacer grandes apuestas en la que sigue trabajando en futuras versiones.(Pero, ¿para qué vale la pena, volatile.py no ha cambiado por cerca de dos años.)

Otros consejos

No sé si RandMac tiene una manera de hacer esto de otra manera, pero se puede convertir la X en una cadena, de esa manera se mantendrá la misma.En el código X en realidad se llama a una función cada vez.

X = str(RandMAC())
print X
print X
print X
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top