From 710e1deccd4d1cab1f8fba3d88482da7b16dfe8f Mon Sep 17 00:00:00 2001 From: gpotter2 <gabriel@potter.fr> Date: Sat, 6 May 2017 03:34:06 +0200 Subject: [PATCH] Static LOOPBACK_VARS access In order to avoid any conflicts when the consts are changed --- scapy/arch/windows/__init__.py | 8 ++++---- scapy/consts.py | 6 +++--- scapy/layers/l2.py | 4 ++-- scapy/route.py | 7 +++---- scapy/route6.py | 6 +++--- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/scapy/arch/windows/__init__.py b/scapy/arch/windows/__init__.py index f2861a0c..db30caba 100755 --- a/scapy/arch/windows/__init__.py +++ b/scapy/arch/windows/__init__.py @@ -13,6 +13,7 @@ import subprocess as sp from glob import glob import tempfile +import scapy from scapy.config import conf, ConfClass from scapy.error import Scapy_Exception, log_loading, log_runtime, warning from scapy.utils import atol, itom, inet_aton, inet_ntoa, PcapReader @@ -459,7 +460,6 @@ class NetworkInterfaceDict(UserDict): scapy.consts.LOOPBACK_INTERFACE = self.dev_from_name( scapy.consts.LOOPBACK_NAME, ) - except: pass def dev_from_name(self, name): @@ -814,7 +814,7 @@ def route_add_loopback(routes=None, ipv6=False, iflist=None): if not conf.route.routes: return data = {} - data['name'] = LOOPBACK_NAME + data['name'] = scapy.consts.LOOPBACK_NAME data['description'] = "Loopback" data['win_index'] = -1 data['guid'] = "{0XX00000-X000-0X0X-X00X-00XXXX000XXX}" @@ -827,11 +827,11 @@ def route_add_loopback(routes=None, ipv6=False, iflist=None): # Remove all LOOPBACK_NAME routes for route in list(conf.route.routes): iface = route[3] - if iface.name == LOOPBACK_NAME: + if iface.name == scapy.consts.LOOPBACK_NAME: conf.route.routes.remove(route) # Remove LOOPBACK_NAME interface for devname, iface in IFACES.items(): - if iface.name == LOOPBACK_NAME: + if iface.name == scapy.consts.LOOPBACK_NAME: IFACES.pop(devname) # Inject interface IFACES[data['guid']] = adapter diff --git a/scapy/consts.py b/scapy/consts.py index 9b31a71e..ff6b771b 100644 --- a/scapy/consts.py +++ b/scapy/consts.py @@ -68,12 +68,12 @@ if WINDOWS: LOOPBACK_NAME = "Microsoft Loopback Adapter" except ValueError: LOOPBACK_NAME = "Microsoft Loopback Adapter" + # Will be different on Windows + LOOPBACK_INTERFACE = None else: uname = os.uname() LOOPBACK_NAME = "lo" if LINUX else "lo0" - -# Will be different on Windows -LOOPBACK_INTERFACE = LOOPBACK_NAME + LOOPBACK_INTERFACE = LOOPBACK_NAME def parent_function(): return inspect.getouterframes(inspect.currentframe()) diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py index ddb9307d..3aa148ad 100644 --- a/scapy/layers/l2.py +++ b/scapy/layers/l2.py @@ -11,6 +11,7 @@ from __future__ import absolute_import from __future__ import print_function import os, struct, time, socket +import scapy from scapy.base_classes import Net from scapy.config import conf from scapy.data import * @@ -21,7 +22,6 @@ from scapy.plist import SndRcvList from scapy.fields import * from scapy.sendrecv import srp, srp1, srpflood from scapy.arch import get_if_hwaddr -from scapy.consts import LOOPBACK_INTERFACE from scapy.utils import inet_ntoa, inet_aton from scapy.error import warning if conf.route is None: @@ -66,7 +66,7 @@ def getmacbyip(ip, chainCC=0): if (tmp[0] & 0xf0) == 0xe0: # mcast @ return "01:00:5e:%.2x:%.2x:%.2x" % (tmp[1]&0x7f,tmp[2],tmp[3]) iff,a,gw = conf.route.route(ip) - if ( (iff == LOOPBACK_INTERFACE) or (ip == conf.route.get_if_bcast(iff)) ): + if ( (iff == scapy.consts.LOOPBACK_INTERFACE) or (ip == conf.route.get_if_bcast(iff)) ): return "ff:ff:ff:ff:ff:ff" if gw != "0.0.0.0": ip = gw diff --git a/scapy/route.py b/scapy/route.py index 40a73077..411fc03c 100644 --- a/scapy/route.py +++ b/scapy/route.py @@ -8,7 +8,6 @@ Routing and handling of network interfaces. """ from __future__ import absolute_import -from scapy.consts import LOOPBACK_NAME, LOOPBACK_INTERFACE from scapy.utils import atol, ltoa, itom, pretty_routes from scapy.config import conf from scapy.error import Scapy_Exception, warning @@ -153,13 +152,13 @@ class Route: continue aa = atol(a) if aa == dst: - pathes.append((0xffffffff,(LOOPBACK_INTERFACE,a,"0.0.0.0"))) + pathes.append((0xffffffff,(scapy.consts.LOOPBACK_INTERFACE,a,"0.0.0.0"))) if (dst & m) == (d & m): pathes.append((m,(i,a,gw))) if not pathes: if verbose: warning("No route found (no default route?)") - return LOOPBACK_INTERFACE,"0.0.0.0","0.0.0.0" + return scapy.consts.LOOPBACK_INTERFACE,"0.0.0.0","0.0.0.0" # Choose the more specific route (greatest netmask). # XXX: we don't care about metrics pathes.sort(key=lambda x: x[0]) @@ -184,6 +183,6 @@ conf.route=Route() #XXX use "with" _betteriface = conf.route.route("0.0.0.0", verbose=0)[0] -if ((_betteriface if (isinstance(_betteriface, six.string_types) or _betteriface is None) else _betteriface.name) != LOOPBACK_NAME): +if ((_betteriface if (isinstance(_betteriface, six.string_types) or _betteriface is None) else _betteriface.name) != scapy.consts.LOOPBACK_NAME): conf.iface = _betteriface del(_betteriface) diff --git a/scapy/route6.py b/scapy/route6.py index fe433f33..d31412df 100644 --- a/scapy/route6.py +++ b/scapy/route6.py @@ -18,12 +18,12 @@ Routing and network interface handling for IPv6. from __future__ import absolute_import import socket +import scapy from scapy.config import conf from scapy.utils6 import * from scapy.arch import * from scapy.pton_ntop import * from scapy.error import warning, log_loading -from scapy.consts import LOOPBACK_INTERFACE import scapy.modules.six as six @@ -220,7 +220,7 @@ class Route6: if not pathes: warning("No route found for IPv6 destination %s (no default route?)" % dst) - return (LOOPBACK_INTERFACE, "::", "::") + return (scapy.consts.LOOPBACK_INTERFACE, "::", "::") # Sort with longest prefix first pathes.sort(reverse=True) @@ -237,7 +237,7 @@ class Route6: if res == []: warning("Found a route for IPv6 destination '%s', but no possible source address." % dst) - return (LOOPBACK_INTERFACE, "::", "::") + return (scapy.consts.LOOPBACK_INTERFACE, "::", "::") # Symptom : 2 routes with same weight (our weight is plen) # Solution : -- GitLab