diff options
author | Hanoh Haim <hhaim@cisco.com> | 2016-02-01 17:53:25 +0200 |
---|---|---|
committer | Hanoh Haim <hhaim@cisco.com> | 2016-02-01 17:53:25 +0200 |
commit | f7d24e3fde8dbd36f9e2679307f5f384022857f2 (patch) | |
tree | 86d6e0c5a44bd84ce0f15d820c6fa08c0ee827a3 /scripts/external_libs/scapy-2.3.1/scapy/scapypipes.py | |
parent | 37ea6af93798ef5e2a877b755ff6dc6cb2cde33a (diff) |
first scapy version
Diffstat (limited to 'scripts/external_libs/scapy-2.3.1/scapy/scapypipes.py')
-rw-r--r-- | scripts/external_libs/scapy-2.3.1/scapy/scapypipes.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/scripts/external_libs/scapy-2.3.1/scapy/scapypipes.py b/scripts/external_libs/scapy-2.3.1/scapy/scapypipes.py new file mode 100644 index 00000000..29b370bc --- /dev/null +++ b/scripts/external_libs/scapy-2.3.1/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) + |