diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index 3fa054866c9297fbf4687e3a853742d8b86e3fca..4b2584fa36bcb45d28efb58d918f48546ff29f4f 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -14,6 +14,7 @@ Generators and packet meta classes.
 import re,random,socket
 import config
 import error
+import types
 
 class Gen(object):
     def __iter__(self):
@@ -24,19 +25,20 @@ class SetGen(Gen):
         self._iterpacket=_iterpacket
         if isinstance(set, (list, BasePacketList)):
             self.set = list(set)
+        elif (type(set) is tuple) and (2 <= len(set) <= 3) and \
+             all(type(i) is int for i in set):
+            # We use set[1] + 1 as stop value for xrange to maintain
+            # the behavior of using tuples as field `set`
+            self.set = [xrange(*((set[0], set[1] + 1) + set[2:]))]
         else:
             self.set = [set]
     def transf(self, element):
         return element
     def __iter__(self):
         for i in self.set:
-            if (type(i) is tuple) and (len(i) == 2) and type(i[0]) is int and type(i[1]) is int:
-                if  (i[0] <= i[1]):
-                    j=i[0]
-                    while j <= i[1]:
-                        yield j
-                        j += 1
-            elif isinstance(i, Gen) and (self._iterpacket or not isinstance(i,BasePacket)):
+            if (isinstance(i, Gen) and
+                (self._iterpacket or not isinstance(i,BasePacket))) or (
+                    isinstance(i, (xrange, types.GeneratorType))):
                 for j in i:
                     yield j
             else: