diff options
Diffstat (limited to 'scripts/external_libs/scapy-python3-0.18/scapy/supersocket.py')
-rw-r--r-- | scripts/external_libs/scapy-python3-0.18/scapy/supersocket.py | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/scripts/external_libs/scapy-python3-0.18/scapy/supersocket.py b/scripts/external_libs/scapy-python3-0.18/scapy/supersocket.py deleted file mode 100644 index b87f9c16..00000000 --- a/scripts/external_libs/scapy-python3-0.18/scapy/supersocket.py +++ /dev/null @@ -1,141 +0,0 @@ -## 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 - -""" -SuperSocket. -""" - -import socket,time -from .config import conf -from .data import * -from scapy.error import warning, log_runtime - -class _SuperSocket_metaclass(type): - def __repr__(self): - if self.desc is not None: - return "<%s: %s>" % (self.__name__,self.desc) - else: - return "<%s>" % self.__name__ - - -class SuperSocket(metaclass = _SuperSocket_metaclass): - desc = None - closed=0 - def __init__(self, family=socket.AF_INET,type=socket.SOCK_STREAM, proto=0): - self.ins = socket.socket(family, type, proto) - self.outs = self.ins - self.promisc=None - def send(self, x): - sx = bytes(x) - if hasattr(x, "sent_time"): - x.sent_time = time.time() - return self.outs.send(sx) - def recv(self, x=MTU): - return conf.raw_layer(self.ins.recv(x)) - def fileno(self): - return self.ins.fileno() - def close(self): - if self.closed: - return - self.closed=1 - if self.ins != self.outs: - if self.outs and self.outs.fileno() != -1: - self.outs.close() - if self.ins and self.ins.fileno() != -1: - self.ins.close() - def sr(self, *args, **kargs): - return sendrecv.sndrcv(self, *args, **kargs) - def sr1(self, *args, **kargs): - a,b = sendrecv.sndrcv(self, *args, **kargs) - if len(a) > 0: - return a[0][1] - else: - return None - def sniff(self, *args, **kargs): - return sendrecv.sniff(opened_socket=self, *args, **kargs) - -class L3RawSocket(SuperSocket): - desc = "Layer 3 using Raw sockets (PF_INET/SOCK_RAW)" - def __init__(self, type = ETH_P_IP, filter=None, iface=None, promisc=None, nofilter=0): - self.outs = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) - self.outs.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1) - self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) - if iface is not None: - self.ins.bind((iface, type)) - def recv(self, x=MTU): - pkt, sa_ll = self.ins.recvfrom(x) - if sa_ll[2] == socket.PACKET_OUTGOING: - return None - if sa_ll[3] in conf.l2types: - cls = conf.l2types[sa_ll[3]] - lvl = 2 - elif sa_ll[1] in conf.l3types: - cls = conf.l3types[sa_ll[1]] - lvl = 3 - else: - cls = conf.default_l2 - warning("Unable to guess type (interface=%s protocol=%#x family=%i). Using %s" % (sa_ll[0],sa_ll[1],sa_ll[3],cls.name)) - lvl = 3 - - try: - pkt = cls(pkt) - except KeyboardInterrupt: - raise - except: - if conf.debug_dissector: - raise - pkt = conf.raw_layer(pkt) - if lvl == 2: - pkt = pkt.payload - - if pkt is not None: - from arch import get_last_packet_timestamp - pkt.time = get_last_packet_timestamp(self.ins) - return pkt - def send(self, x): - try: - #sx = str(x) - sx = x - x.sent_time = time.time() - self.outs.sendto(sx,(x.dst,0)) - except socket.error as msg: - log_runtime.error(msg) - -class SimpleSocket(SuperSocket): - desc = "wrapper arround a classic socket" - def __init__(self, sock): - self.ins = sock - self.outs = sock - - -class StreamSocket(SimpleSocket): - desc = "transforms a stream socket into a layer 2" - def __init__(self, sock, basecls=None): - if basecls is None: - basecls = conf.raw_layer - SimpleSocket.__init__(self, sock) - self.basecls = basecls - - def recv(self, x=MTU): - pkt = self.ins.recv(x, socket.MSG_PEEK) - x = len(pkt) - if x == 0: - raise socket.error((100,"Underlying stream socket tore down")) - pkt = self.basecls(pkt) - pad = pkt.getlayer(conf.padding_layer) - if pad is not None and pad.underlayer is not None: - del(pad.underlayer.payload) - while pad is not None and not isinstance(pad, NoPayload): - x -= len(pad.load) - pad = pad.payload - self.ins.recv(x) - return pkt - - - -if conf.L3socket is None: - conf.L3socket = L3RawSocket - -import scapy.sendrecv |