Skip to content
Snippets Groups Projects
Commit d36cba89 authored by Pierre Lalet's avatar Pierre Lalet
Browse files

Merged in namitsingal91/scapy/issue_5122 (pull request #133)

send and sendp can return sent packets. Fixes #5122.
parents c0f8eb3c f1e111ca
No related branches found
No related tags found
No related merge requests found
...@@ -207,7 +207,7 @@ def sndrcv(pks, pkt, timeout = None, inter = 0, verbose=None, chainCC=0, retry=0 ...@@ -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") 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: if type(x) is str:
x = conf.raw_layer(load=x) x = conf.raw_layer(load=x)
if not isinstance(x, Gen): if not isinstance(x, Gen):
...@@ -218,7 +218,9 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, * ...@@ -218,7 +218,9 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
if count is not None: if count is not None:
loop = -count loop = -count
elif not loop: elif not loop:
loop=-1 loop = -1
if return_packets:
sent_packets = plist.PacketList()
try: try:
while loop: while loop:
dt0 = None dt0 = None
...@@ -230,8 +232,10 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, * ...@@ -230,8 +232,10 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
if st > 0: if st > 0:
time.sleep(st) time.sleep(st)
else: else:
dt0 = ct-p.time dt0 = ct-p.time
s.send(p) s.send(p)
if return_packets:
sent_packets.append(p)
n += 1 n += 1
if verbose: if verbose:
os.write(1,".") os.write(1,".")
...@@ -243,20 +247,25 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, * ...@@ -243,20 +247,25 @@ def __gen_send(s, x, inter=0, loop=0, count=None, verbose=None, realtime=None, *
s.close() s.close()
if verbose: if verbose:
print "\nSent %i packets." % n print "\nSent %i packets." % n
if return_packets:
return sent_packets
@conf.commands.register @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 at layer 3
send(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None""" 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 @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 """Send packets at layer 2
sendp(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None""" sendp(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None"""
if iface is None and iface_hint is not None: if iface is None and iface_hint is not None:
iface = conf.route.route(iface_hint)[0] 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 @conf.commands.register
def sendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None): def sendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment