diff options
author | 2016-03-21 12:55:16 +0200 | |
---|---|---|
committer | 2016-03-21 12:55:16 +0200 | |
commit | 1831e9bbc03484b078dbd604dfec0e025cea8eca (patch) | |
tree | 96ffe76ee50a29f8eea36ada1cc21738de09bcb7 /scripts/external_libs/scapy-python3-0.18/scapy/scapypipes.py | |
parent | 33c80d0f2c3af8b302e50ce3925869dfd37267ed (diff) |
scapy 3-0.18 with trex client diff
Diffstat (limited to 'scripts/external_libs/scapy-python3-0.18/scapy/scapypipes.py')
-rw-r--r-- | scripts/external_libs/scapy-python3-0.18/scapy/scapypipes.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/scripts/external_libs/scapy-python3-0.18/scapy/scapypipes.py b/scripts/external_libs/scapy-python3-0.18/scapy/scapypipes.py new file mode 100644 index 00000000..aa67277e --- /dev/null +++ b/scripts/external_libs/scapy-python3-0.18/scapy/scapypipes.py @@ -0,0 +1,123 @@ +## This file is part of Scapy +## See http://www.secdev.org/projects/scapy for more informations +## Copyright (C) Philippe Biondi <phil@secdev.org> +## This program is published under a GPLv2 license + +from .pipetool import Source,Drain,Sink +from .config import conf + + +class SniffSource(Source): + """Read packets from an interface and send them to low exit. + +-----------+ + >>-| |->> + | | + >-| [iface]--|-> + +-----------+ +""" + def __init__(self, iface=None, filter=None, name=None): + Source.__init__(self, name=name) + self.iface = iface + self.filter = filter + def start(self): + self.s = conf.L2listen(iface=self.iface, filter=self.filter) + def stop(self): + self.s.close() + def fileno(self): + return self.s.fileno() + def deliver(self): + self._send(self.s.recv()) + +class RdpcapSource(Source): + """Read packets from a PCAP file send them to low exit. + +----------+ + >>-| |->> + | | + >-| [pcap]--|-> + +----------+ +""" + def __init__(self, fname, name=None): + Source.__init__(self, name=name) + self.fname = fname + self.f = PcapReader(self.fname) + def start(self): + print("start") + self.f = PcapReader(self.fname) + self.is_exhausted = False + def stop(self): + print("stop") + self.f.close() + def fileno(self): + return self.f.fileno() + def deliver(self): + p = self.f.recv() + print("deliver %r" % p) + if p is None: + self.is_exhausted = True + else: + self._send(p) + + +class InjectSink(Sink): + """Packets received on low input are injected to an interface + +-----------+ + >>-| |->> + | | + >-|--[iface] |-> + +-----------+ +""" + def __init__(self, iface=None, name=None): + Sink.__init__(self, name=name) + if iface == None: + iface = conf.iface + self.iface = iface + def start(self): + self.s = conf.L2socket(iface=self.iface) + def stop(self): + self.s.close() + def push(self, msg): + self.s.send(msg) + +class Inject3Sink(InjectSink): + def start(self): + self.s = conf.L3socket(iface=self.iface) + + +class WrpcapSink(Sink): + """Packets received on low input are written to PCA file + +----------+ + >>-| |->> + | | + >-|--[pcap] |-> + +----------+ +""" + def __init__(self, fname, name=None): + Sink.__init__(self, name=name) + self.f = PcapWriter(fname) + def stop(self): + self.f.flush() + def push(self, msg): + self.f.write(msg) + + +class UDPDrain(Drain): + """Apply a function to messages on low and high entry + +-------------+ + >>-|--[payload]--|->> + | X | + >-|----[UDP]----|-> + +-------------+ +""" + def __init__(self, ip="127.0.0.1", port=1234): + Drain.__init__(self) + self.ip = ip + self.port = port + + def push(self, msg): + if IP in msg and msg[IP].proto == 17 and UDP in msg: + payload = msg[UDP].payload + self._high_send(str(payload)) + def high_push(self, msg): + p = IP(dst=self.ip)/UDP(sport=1234,dport=self.port)/msg + self._send(p) + |