diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py
index 837171b6f93a37394362b7dd7cc8b6f02d6ea3f4..b8d5bb5a33c07219d926aa3b4441e5d10fb90798 100644
--- a/scapy/sendrecv.py
+++ b/scapy/sendrecv.py
@@ -207,7 +207,7 @@ def sndrcv(pks, pkt, timeout = None, inter = 0, verbose=None, chainCC=0, retry=0
     return plist.SndRcvList(ans),plist.PacketList(remain,"Unanswered")
 
 
-def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs):
+def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, return_packets=False, *args, **kargs):
     if type(x) is str:
         x = conf.raw_layer(load=x)
     if not isinstance(x, Gen):
@@ -218,7 +218,9 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
     if count is not None:
         loop = -count
     elif not loop:
-        loop=-1
+        loop = -1
+    if return_packets:
+        sent_packets = plist.PacketList()
     try:
         while loop:
             dt0 = None
@@ -230,8 +232,10 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
                         if st > 0:
                             time.sleep(st)
                     else:
-                        dt0 = ct-p.time 
+                        dt0 = ct-p.time
                 s.send(p)
+                if return_packets:
+                    sent_packets.append(p)
                 n += 1
                 if verbose:
                     os.write(1,".")
@@ -243,20 +247,25 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
     s.close()
     if verbose:
         print "\nSent %i packets." % n
+    if return_packets:
+        return sent_packets
         
 @conf.commands.register
-def send(x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs):
+def send(x, inter=0, loop=0, count=None, verbose=None, realtime=None, return_packets=False, *args, **kargs):
     """Send packets at layer 3
 send(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None"""
-    __gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose, realtime=realtime)
+    return __gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose,
+                      realtime=realtime, return_packets=return_packets)
 
 @conf.commands.register
-def sendp(x, inter=0, loop=0, iface=None, iface_hint=None, count=None, verbose=None, realtime=None, *args, **kargs):
+def sendp(x, inter=0, loop=0, iface=None, iface_hint=None, count=None, verbose=None, realtime=None,
+          return_packets=False, *args, **kargs):
     """Send packets at layer 2
 sendp(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None"""
     if iface is None and iface_hint is not None:
         iface = conf.route.route(iface_hint)[0]
-    __gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count, verbose=verbose, realtime=realtime)
+    return __gen_send(conf.L2socket(iface=iface, *args, **kargs), x, inter=inter, loop=loop, count=count,
+                      verbose=verbose, realtime=realtime, return_packets=return_packets)
 
 @conf.commands.register
 def sendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None):