diff --git a/scapy/fields.py b/scapy/fields.py
index 91df1adaa4d6927c1e14e8a2bc784fd33454c2b1..70d9576e83f679477d30536f172c2573fc8e8363 100644
--- a/scapy/fields.py
+++ b/scapy/fields.py
@@ -829,6 +829,24 @@ class BitMultiEnumField(BitField,MultiEnumField):
         return MultiEnumField.i2repr(self, pkt, x)
 
 
+class ByteEnumKeysField(ByteEnumField):
+    """ByteEnumField that picks valid values when fuzzed. """
+    def randval(self):
+        return RandEnumKeys(self.i2s)
+
+
+class ShortEnumKeysField(ShortEnumField):
+    """ShortEnumField that picks valid values when fuzzed. """
+    def randval(self):
+        return RandEnumKeys(self.i2s)
+
+
+class IntEnumKeysField(IntEnumField):
+    """IntEnumField that picks valid values when fuzzed. """
+    def randval(self):
+        return RandEnumKeys(self.i2s)
+
+
 # Little endian long field
 class LELongField(Field):
     def __init__(self, name, default):
diff --git a/scapy/volatile.py b/scapy/volatile.py
index 5d3e2adcb1b83b97fadd0b7c1ef9da4b5991c140..12fa1b0b62daae13ad7fcd7be6c3adeb4ac11f7a 100644
--- a/scapy/volatile.py
+++ b/scapy/volatile.py
@@ -188,6 +188,17 @@ class RandEnumSLong(RandEnum):
     def __init__(self):
         RandEnum.__init__(self, -2L**63, 2L**63-1)
 
+class RandEnumKeys(RandEnum):
+    """Picks a random value from dict keys list. """
+    def __init__(self, enum):
+        self.enum = []
+        for key in list(enum.keys()):
+            self.enum.append(key)
+        self.seq = RandomEnumeration(0, len(list(enum.keys())) - 1)
+
+    def _fix(self):
+        return self.enum[self.seq.next()]
+
 class RandChoice(RandField):
     def __init__(self, *args):
         if not args: