summaryrefslogtreecommitdiffstats
path: root/scripts/external_libs/scapy-2.3.1/scapy/arch/pcapdnet.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/external_libs/scapy-2.3.1/scapy/arch/pcapdnet.py')
-rw-r--r--scripts/external_libs/scapy-2.3.1/scapy/arch/pcapdnet.py368
1 files changed, 0 insertions, 368 deletions
diff --git a/scripts/external_libs/scapy-2.3.1/scapy/arch/pcapdnet.py b/scripts/external_libs/scapy-2.3.1/scapy/arch/pcapdnet.py
deleted file mode 100644
index 94673d7d..00000000
--- a/scripts/external_libs/scapy-2.3.1/scapy/arch/pcapdnet.py
+++ /dev/null
@@ -1,368 +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
-
-"""
-Packet sending and receiving with libdnet and libpcap/WinPcap.
-"""
-
-import time,struct,sys
-if not sys.platform.startswith("win"):
- from fcntl import ioctl
-from scapy.data import *
-from scapy.config import conf
-from scapy.utils import warning
-from scapy.supersocket import SuperSocket
-from scapy.error import Scapy_Exception
-import scapy.arch
-
-
-
-if conf.use_pcap:
-
-
-
- try:
- import pcap
- except ImportError,e:
- try:
- import pcapy as pcap
- except ImportError,e2:
- if conf.interactive:
- log_loading.error("Unable to import pcap module: %s/%s" % (e,e2))
- conf.use_pcap = False
- else:
- raise
- if conf.use_pcap:
-
- # From BSD net/bpf.h
- #BIOCIMMEDIATE=0x80044270
- BIOCIMMEDIATE=-2147204496
-
- if hasattr(pcap,"pcap"): # python-pypcap
- class _PcapWrapper_pypcap:
- def __init__(self, device, snaplen, promisc, to_ms):
- try:
- self.pcap = pcap.pcap(device, snaplen, promisc, immediate=1, timeout_ms=to_ms)
- except TypeError:
- # Older pypcap versions do not support the timeout_ms argument
- self.pcap = pcap.pcap(device, snaplen, promisc, immediate=1)
- def __getattr__(self, attr):
- return getattr(self.pcap, attr)
- def __del__(self):
- warning("__del__: don't know how to close the file descriptor. Bugs ahead ! Please report this bug.")
- def next(self):
- c = self.pcap.next()
- if c is None:
- return
- ts, pkt = c
- return ts, str(pkt)
- open_pcap = lambda *args,**kargs: _PcapWrapper_pypcap(*args,**kargs)
- elif hasattr(pcap,"pcapObject"): # python-libpcap
- class _PcapWrapper_libpcap:
- def __init__(self, *args, **kargs):
- self.pcap = pcap.pcapObject()
- self.pcap.open_live(*args, **kargs)
- def setfilter(self, filter):
- self.pcap.setfilter(filter, 0, 0)
- def next(self):
- c = self.pcap.next()
- if c is None:
- return
- l,pkt,ts = c
- return ts,pkt
- def __getattr__(self, attr):
- return getattr(self.pcap, attr)
- def __del__(self):
- fd = self.pcap.fileno()
- os.close(fd)
- open_pcap = lambda *args,**kargs: _PcapWrapper_libpcap(*args,**kargs)
- elif hasattr(pcap,"open_live"): # python-pcapy
- class _PcapWrapper_pcapy:
- def __init__(self, *args, **kargs):
- self.pcap = pcap.open_live(*args, **kargs)
- def next(self):
- try:
- c = self.pcap.next()
- except pcap.PcapError:
- return None
- else:
- h,p = c
- s,us = h.getts()
- return (s+0.000001*us), p
- def fileno(self):
- warning("fileno: pcapy API does not permit to get capure file descriptor. Bugs ahead! Press Enter to trigger packet reading")
- return 0
- def __getattr__(self, attr):
- return getattr(self.pcap, attr)
- def __del__(self):
- warning("__del__: don't know how to close the file descriptor. Bugs ahead ! Please report this bug.")
- open_pcap = lambda *args,**kargs: _PcapWrapper_pcapy(*args,**kargs)
-
-
- class PcapTimeoutElapsed(Scapy_Exception):
- pass
-
- class L2pcapListenSocket(SuperSocket):
- desc = "read packets at layer 2 using libpcap"
- def __init__(self, iface = None, type = ETH_P_ALL, promisc=None, filter=None):
- self.type = type
- self.outs = None
- self.iface = iface
- if iface is None:
- iface = conf.iface
- if promisc is None:
- promisc = conf.sniff_promisc
- self.promisc = promisc
- self.ins = open_pcap(iface, 1600, self.promisc, 100)
- try:
- ioctl(self.ins.fileno(),BIOCIMMEDIATE,struct.pack("I",1))
- except:
- pass
- if type == ETH_P_ALL: # Do not apply any filter if Ethernet type is given
- if conf.except_filter:
- if filter:
- filter = "(%s) and not (%s)" % (filter, conf.except_filter)
- else:
- filter = "not (%s)" % conf.except_filter
- if filter:
- self.ins.setfilter(filter)
-
- def close(self):
- del(self.ins)
-
- def recv(self, x=MTU):
- ll = self.ins.datalink()
- if ll in conf.l2types:
- cls = conf.l2types[ll]
- else:
- cls = conf.default_l2
- warning("Unable to guess datalink type (interface=%s linktype=%i). Using %s" % (self.iface, ll, cls.name))
-
- pkt = None
- while pkt is None:
- pkt = self.ins.next()
- if pkt is not None:
- ts,pkt = pkt
- if scapy.arch.WINDOWS and pkt is None:
- raise PcapTimeoutElapsed
-
- try:
- pkt = cls(pkt)
- except KeyboardInterrupt:
- raise
- except:
- if conf.debug_dissector:
- raise
- pkt = conf.raw_layer(pkt)
- pkt.time = ts
- return pkt
-
- def send(self, x):
- raise Scapy_Exception("Can't send anything with L2pcapListenSocket")
-
-
- conf.L2listen = L2pcapListenSocket
-
-
-
-
-if conf.use_dnet:
- try:
- import dnet
- except ImportError,e:
- if conf.interactive:
- log_loading.error("Unable to import dnet module: %s" % e)
- conf.use_dnet = False
- def get_if_raw_hwaddr(iff):
- "dummy"
- return (0,"\0\0\0\0\0\0")
- def get_if_raw_addr(iff):
- "dummy"
- return "\0\0\0\0"
- def get_if_list():
- "dummy"
- return []
- else:
- raise
- else:
- def get_if_raw_hwaddr(iff):
- if iff == scapy.arch.LOOPBACK_NAME:
- return (772, '\x00'*6)
- try:
- l = dnet.intf().get(iff)
- l = l["link_addr"]
- except:
- raise Scapy_Exception("Error in attempting to get hw address for interface [%s]" % iff)
- return l.type,l.data
- def get_if_raw_addr(ifname):
- i = dnet.intf()
- return i.get(ifname)["addr"].data
- def get_if_list():
- return [i.get("name", None) for i in dnet.intf()]
-
-
-if conf.use_pcap and conf.use_dnet:
- class L3dnetSocket(SuperSocket):
- desc = "read/write packets at layer 3 using libdnet and libpcap"
- def __init__(self, type = ETH_P_ALL, filter=None, promisc=None, iface=None, nofilter=0):
- self.iflist = {}
- self.intf = dnet.intf()
- if iface is None:
- iface = conf.iface
- self.iface = iface
- self.ins = open_pcap(iface, 1600, 0, 100)
- try:
- ioctl(self.ins.fileno(),BIOCIMMEDIATE,struct.pack("I",1))
- except:
- pass
- if nofilter:
- if type != ETH_P_ALL: # PF_PACKET stuff. Need to emulate this for pcap
- filter = "ether proto %i" % type
- else:
- filter = None
- else:
- if conf.except_filter:
- if filter:
- filter = "(%s) and not (%s)" % (filter, conf.except_filter)
- else:
- filter = "not (%s)" % conf.except_filter
- if type != ETH_P_ALL: # PF_PACKET stuff. Need to emulate this for pcap
- if filter:
- filter = "(ether proto %i) and (%s)" % (type,filter)
- else:
- filter = "ether proto %i" % type
- if filter:
- self.ins.setfilter(filter)
- def send(self, x):
- iff,a,gw = x.route()
- if iff is None:
- iff = conf.iface
- ifs,cls = self.iflist.get(iff,(None,None))
- if ifs is None:
- iftype = self.intf.get(iff)["type"]
- if iftype == dnet.INTF_TYPE_ETH:
- try:
- cls = conf.l2types[1]
- except KeyError:
- warning("Unable to find Ethernet class. Using nothing")
- ifs = dnet.eth(iff)
- else:
- ifs = dnet.ip()
- self.iflist[iff] = ifs,cls
- if cls is None:
- sx = str(x)
- else:
- sx = str(cls()/x)
- x.sent_time = time.time()
- ifs.send(sx)
- def recv(self,x=MTU):
- ll = self.ins.datalink()
- if ll in conf.l2types:
- cls = conf.l2types[ll]
- else:
- cls = conf.default_l2
- warning("Unable to guess datalink type (interface=%s linktype=%i). Using %s" % (self.iface, ll, cls.name))
-
- pkt = self.ins.next()
- if pkt is not None:
- ts,pkt = pkt
- if pkt is None:
- return
-
- try:
- pkt = cls(pkt)
- except KeyboardInterrupt:
- raise
- except:
- if conf.debug_dissector:
- raise
- pkt = conf.raw_layer(pkt)
- pkt.time = ts
- return pkt.payload
-
- def nonblock_recv(self):
- self.ins.setnonblock(1)
- p = self.recv()
- self.ins.setnonblock(0)
- return p
-
- def close(self):
- if hasattr(self, "ins"):
- del(self.ins)
- if hasattr(self, "outs"):
- del(self.outs)
-
- class L2dnetSocket(SuperSocket):
- desc = "read/write packets at layer 2 using libdnet and libpcap"
- def __init__(self, iface = None, type = ETH_P_ALL, filter=None, nofilter=0):
- if iface is None:
- iface = conf.iface
- self.iface = iface
- self.ins = open_pcap(iface, 1600, 0, 100)
- try:
- ioctl(self.ins.fileno(),BIOCIMMEDIATE,struct.pack("I",1))
- except:
- pass
- if nofilter:
- if type != ETH_P_ALL: # PF_PACKET stuff. Need to emulate this for pcap
- filter = "ether proto %i" % type
- else:
- filter = None
- else:
- if conf.except_filter:
- if filter:
- filter = "(%s) and not (%s)" % (filter, conf.except_filter)
- else:
- filter = "not (%s)" % conf.except_filter
- if type != ETH_P_ALL: # PF_PACKET stuff. Need to emulate this for pcap
- if filter:
- filter = "(ether proto %i) and (%s)" % (type,filter)
- else:
- filter = "ether proto %i" % type
- if filter:
- self.ins.setfilter(filter)
- self.outs = dnet.eth(iface)
- def recv(self,x=MTU):
- ll = self.ins.datalink()
- if ll in conf.l2types:
- cls = conf.l2types[ll]
- else:
- cls = conf.default_l2
- warning("Unable to guess datalink type (interface=%s linktype=%i). Using %s" % (self.iface, ll, cls.name))
-
- pkt = self.ins.next()
- if pkt is not None:
- ts,pkt = pkt
- if pkt is None:
- return
-
- try:
- pkt = cls(pkt)
- except KeyboardInterrupt:
- raise
- except:
- if conf.debug_dissector:
- raise
- pkt = conf.raw_layer(pkt)
- pkt.time = ts
- return pkt
-
- def nonblock_recv(self):
- self.ins.setnonblock(1)
- p = self.recv(MTU)
- self.ins.setnonblock(0)
- return p
-
- def close(self):
- if hasattr(self, "ins"):
- del(self.ins)
- if hasattr(self, "outs"):
- del(self.outs)
-
- conf.L3socket=L3dnetSocket
- conf.L2socket=L2dnetSocket
-
-
-