From a65ddc700c23475df28978a17f3b44e93f56ec80 Mon Sep 17 00:00:00 2001 From: Pierre LALET <pierre.lalet@cea.fr> Date: Fri, 29 Sep 2017 22:44:22 +0200 Subject: [PATCH] Python 3: fix dict methods --- scapy/ansmachine.py | 2 +- scapy/asn1/mib.py | 4 +--- scapy/asn1fields.py | 2 +- scapy/contrib/http2.py | 28 +++++++++++++--------------- scapy/contrib/modbus.py | 6 +++--- scapy/dadict.py | 5 +++-- scapy/fields.py | 15 +++++++++------ scapy/layers/all.py | 2 +- scapy/layers/dhcp6.py | 24 ++++++++++++------------ scapy/layers/inet.py | 2 +- scapy/layers/inet6.py | 2 +- scapy/layers/ipsec.py | 4 ++-- scapy/main.py | 2 +- scapy/packet.py | 4 ++-- 14 files changed, 51 insertions(+), 51 deletions(-) diff --git a/scapy/ansmachine.py b/scapy/ansmachine.py index ddc3a935..09c7d44c 100644 --- a/scapy/ansmachine.py +++ b/scapy/ansmachine.py @@ -70,7 +70,7 @@ class AnsweringMachine(six.with_metaclass(ReferenceAM, object)): def parse_all_options(self, mode, kargs): sniffopt = {} sendopt = {} - for k in kargs.keys(): # use .keys(): kargs is modified in the loop + for k in list(kargs): # use list(): kargs is modified in the loop if k in self.sniff_options_list: sniffopt[k] = kargs[k] if k in self.send_options_list: diff --git a/scapy/asn1/mib.py b/scapy/asn1/mib.py index 6a5d37e0..697887bb 100644 --- a/scapy/asn1/mib.py +++ b/scapy/asn1/mib.py @@ -73,8 +73,6 @@ class MIBDict(DADict): s += '\t"%s" -> "%s" [label="%s"];\n' % (parent, o,remainder) s += "}\n" do_graph(s, **kargs) - def __len__(self): - return len(self.keys()) def mib_register(ident, value, the_mib, unresolved): @@ -102,7 +100,7 @@ def mib_register(ident, value, the_mib, unresolved): return False else: the_mib[ident] = resval - keys = list(unresolved.keys()) + keys = list(unresolved) i = 0 while i < len(keys): k = keys[i] diff --git a/scapy/asn1fields.py b/scapy/asn1fields.py index 5f1caf40..3a9ed21f 100644 --- a/scapy/asn1fields.py +++ b/scapy/asn1fields.py @@ -178,7 +178,7 @@ class ASN1F_enum_INTEGER(ASN1F_INTEGER): if isinstance(enum, list): keys = range(len(enum)) else: - keys = enum.keys() + keys = list(enum) if any(isinstance(x, six.string_types) for x in keys): i2s, s2i = s2i, i2s for k in keys: diff --git a/scapy/contrib/http2.py b/scapy/contrib/http2.py index 8cfe66dd..32b2293b 100644 --- a/scapy/contrib/http2.py +++ b/scapy/contrib/http2.py @@ -2230,7 +2230,7 @@ class HPackHdrTable(Sized): @classmethod def init_static_table(cls): # type: () -> None - cls._static_entries_last_idx = max(cls._static_entries.keys()) + cls._static_entries_last_idx = max(cls._static_entries) def __init__(self, dynamic_table_max_size=4096, dynamic_table_cap_size=4096): # type: (int, int) -> None @@ -2379,12 +2379,12 @@ class HPackHdrTable(Sized): If no matching header is found, this method returns None. """ name = name.lower() - for k in type(self)._static_entries.keys(): - if type(self)._static_entries[k].name() == name: - return k - for k in range(0, len(self._dynamic_table)): - if self._dynamic_table[k].name() == name: - return type(self)._static_entries_last_idx + k + 1 + for key, val in six.iteritems(type(self)._static_entries): + if val.name() == name: + return key + for idx, val in enumerate(self._dynamic_table): + if val.name() == name: + return type(self)._static_entries_last_idx + idx + 1 return None def get_idx_by_name_and_value(self, name, value): @@ -2398,14 +2398,12 @@ class HPackHdrTable(Sized): If no matching header is found, this method returns None. """ name = name.lower() - for k in type(self)._static_entries.keys(): - elmt = type(self)._static_entries[k] - if elmt.name() == name and elmt.value() == value: - return k - for k in range(0, len(self._dynamic_table)): - elmt = self._dynamic_table[k] - if elmt.name() == name and elmt.value() == value: - return type(self)._static_entries_last_idx + k + 1 + for key, val in six.iteritems(type(self)._static_entries): + if val.name() == name and val.value() == value: + return key + for idx, val in enumerate(self._dynamic_table): + if val.name() == name and val.value() == value: + return type(self)._static_entries_last_idx + idx + 1 return None def __len__(self): diff --git a/scapy/contrib/modbus.py b/scapy/contrib/modbus.py index 25bcc82f..ee1bdaa4 100644 --- a/scapy/contrib/modbus.py +++ b/scapy/contrib/modbus.py @@ -785,7 +785,7 @@ class ModbusADURequest(Packet): return _modbus_request_classes[function_code] except KeyError: pass - if function_code in _reserved_funccode_request.keys(): + if function_code in _reserved_funccode_request: return ModbusPDUReservedFunctionCodeRequest return ModbusPDUUserDefinedFunctionCodeRequest @@ -820,9 +820,9 @@ class ModbusADUResponse(Packet): return _modbus_error_classes[function_code] except KeyError: pass - if function_code in _reserved_funccode_response.keys(): + if function_code in _reserved_funccode_response: return ModbusPDUReservedFunctionCodeResponse - elif function_code in _reserved_funccode_error.keys(): + elif function_code in _reserved_funccode_error: return ModbusPDUReservedFunctionCodeError if function_code < 0x80: return ModbusPDUUserDefinedFunctionCodeResponse diff --git a/scapy/dadict.py b/scapy/dadict.py index f45e6e37..8fca8e49 100644 --- a/scapy/dadict.py +++ b/scapy/dadict.py @@ -39,9 +39,10 @@ class DADict: def __setitem__(self, attr, val): return setattr(self, self.fixname(attr), val) def __iter__(self): - return iter(map(lambda x_y1: x_y1[1],filter(lambda x_y: x_y[0] and x_y[0][0]!="_", self.__dict__.items()))) + return (value for key, value in six.iteritems(self.__dict__) + if key and key[0] != '_') def _show(self): - for k in self.__dict__.keys(): + for k in self.__dict__: if k and k[0] != "_": print("%10s = %r" % (k,getattr(self,k))) def __repr__(self): diff --git a/scapy/fields.py b/scapy/fields.py index b478779e..e548200d 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -10,6 +10,7 @@ Fields: basic data structures that make up parts of packets. from __future__ import absolute_import import struct,copy,socket,collections from scapy.config import conf +from scapy.dadict import DADict from scapy.volatile import * from scapy.data import * from scapy.compat import * @@ -917,8 +918,10 @@ class _EnumField(Field): self.s2i_cb = None if isinstance(enum, list): keys = range(len(enum)) - else: + elif isinstance(enum, DADict): keys = enum.keys() + else: + keys = list(enum) if any(isinstance(x, str) for x in keys): i2s, s2i = s2i, i2s for k in keys: @@ -965,7 +968,7 @@ class CharEnumField(EnumField): def __init__(self, name, default, enum, fmt = "1s"): EnumField.__init__(self, name, default, enum, fmt) if self.i2s is not None: - k = list(self.i2s.keys()) + k = list(self.i2s) if k and len(k[0]) != 1: self.i2s,self.s2i = self.s2i,self.i2s def any2i_one(self, pkt, x): @@ -1270,8 +1273,8 @@ class MultiFlagsField(BitField): these_names = self.names[v] s = set() for i in x: - for j in these_names.keys(): - if these_names[j].short == i: + for val in six.itervalues(these_names): + if val.short == i: s.add(i) break else: @@ -1289,8 +1292,8 @@ class MultiFlagsField(BitField): r = 0 for flag_set in x: - for i in these_names.keys(): - if these_names[i].short == flag_set: + for i, val in six.iteritems(these_names): + if val.short == flag_set: r |= 1 << i break else: diff --git a/scapy/layers/all.py b/scapy/layers/all.py index 1373bc99..8743276d 100644 --- a/scapy/layers/all.py +++ b/scapy/layers/all.py @@ -13,7 +13,7 @@ from scapy.error import log_loading from scapy.main import load_layer import logging, importlib import scapy.modules.six as six -ignored = list(six.moves.builtins.__dict__.keys()) + ["sys"] +ignored = list(six.moves.builtins.__dict__) + ["sys"] log = logging.getLogger("scapy.loading") __all__ = [] diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py index e109c116..bb6856cf 100644 --- a/scapy/layers/dhcp6.py +++ b/scapy/layers/dhcp6.py @@ -1315,7 +1315,7 @@ DHCPv6_am.parse_options( dns="2001:500::1035", domain="localdomain, local", if self.debug: print("\n[+] List of active DHCPv6 options:") - opts = sorted(self.dhcpv6_options.keys()) + opts = sorted(self.dhcpv6_options) for i in opts: print(" %d: %s" % (i, repr(self.dhcpv6_options[i]))) @@ -1343,7 +1343,7 @@ DHCPv6_am.parse_options( dns="2001:500::1035", domain="localdomain, local", # Mac Address rawmac = get_if_raw_hwaddr(iface)[1] - mac = ":".join("%.02x" % ord(x) for x in rawmac) + mac = ":".join("%.02x" % orb(x) for x in rawmac) self.duid = DUID_LLT(timeval = timeval, lladdr = mac) @@ -1574,12 +1574,12 @@ DHCPv6_am.parse_options( dns="2001:500::1035", domain="localdomain, local", reqopts = [] if p.haslayer(DHCP6OptOptReq): # add only asked ones reqopts = p[DHCP6OptOptReq].reqopts - for o in self.dhcpv6_options.keys(): + for o, opt in six.iteritems(self.dhcpv6_options): if o in reqopts: - resp /= self.dhcpv6_options[o] + resp /= opt else: # advertise everything we have available - for o in self.dhcpv6_options.keys(): - resp /= self.dhcpv6_options[o] + for o, opt in six.iteritems(self.dhcpv6_options): + resp /= opt return resp @@ -1595,15 +1595,15 @@ DHCPv6_am.parse_options( dns="2001:500::1035", domain="localdomain, local", reqopts = [] if p.haslayer(DHCP6OptOptReq): # add only asked ones reqopts = p[DHCP6OptOptReq].reqopts - for o in self.dhcpv6_options.keys(): + for o, opt in six.iteritems(self.dhcpv6_options): if o in reqopts: - resp /= self.dhcpv6_options[o] + resp /= opt else: # advertise everything we have available. # Should not happen has clients MUST include # and ORO in requests (sec 18.1.1) -- arno - for o in self.dhcpv6_options.keys(): - resp /= self.dhcpv6_options[o] + for o, opt in six.iteritems(self.dhcpv6_options): + resp /= opt return resp @@ -1693,8 +1693,8 @@ DHCPv6_am.parse_options( dns="2001:500::1035", domain="localdomain, local", reqopts = [] if p.haslayer(DHCP6OptOptReq): reqopts = p[DHCP6OptOptReq].reqopts - for o in self.dhcpv6_options.keys(): - resp /= self.dhcpv6_options[o] + for o, opt in six.iteritems(self.dhcpv6_options): + resp /= opt return resp diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py index 4154d86a..5ce30aa8 100644 --- a/scapy/layers/inet.py +++ b/scapy/layers/inet.py @@ -1089,7 +1089,7 @@ class TracerouteResult(SndRcvList): m = min(x for x, y in six.itervalues(k) if y) except ValueError: continue - for l in k.keys(): # use .keys(): k is modified in the loop + for l in list(k): # use list(): k is modified in the loop if l > m: del k[l] return trace diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py index f7dad10c..d626a4cd 100644 --- a/scapy/layers/inet6.py +++ b/scapy/layers/inet6.py @@ -3179,7 +3179,7 @@ class TracerouteResult6(TracerouteResult): m = min(x for x, y in six.itervalues(k) if y) except ValueError: continue - for l in k.keys(): # use .keys(): k is modified in the loop + for l in list(k): # use list(): k is modified in the loop if l > m: del k[l] diff --git a/scapy/layers/ipsec.py b/scapy/layers/ipsec.py index 91cd98ec..0301351a 100644 --- a/scapy/layers/ipsec.py +++ b/scapy/layers/ipsec.py @@ -786,7 +786,7 @@ class SecurityAssociation(object): if crypt_algo: if crypt_algo not in CRYPT_ALGOS: raise TypeError('unsupported encryption algo %r, try %r' % - (crypt_algo, list(CRYPT_ALGOS.keys()))) + (crypt_algo, list(CRYPT_ALGOS))) self.crypt_algo = CRYPT_ALGOS[crypt_algo] if crypt_key: @@ -804,7 +804,7 @@ class SecurityAssociation(object): if auth_algo: if auth_algo not in AUTH_ALGOS: raise TypeError('unsupported integrity algo %r, try %r' % - (auth_algo, list(AUTH_ALGOS.keys()))) + (auth_algo, list(AUTH_ALGOS))) self.auth_algo = AUTH_ALGOS[auth_algo] self.auth_key = auth_key else: diff --git a/scapy/main.py b/scapy/main.py index d4b30c39..48680b02 100644 --- a/scapy/main.py +++ b/scapy/main.py @@ -231,7 +231,7 @@ def save_session(fname=None, session=None, pickleProto=-1): if "__builtins__" in to_be_saved: del(to_be_saved["__builtins__"]) - for k in list(to_be_saved.keys()): + for k in list(to_be_saved): i = to_be_saved[k] if hasattr(i, "__module__") and (k[0] == "_" or i.__module__.startswith("IPython")): del(to_be_saved[k]) diff --git a/scapy/packet.py b/scapy/packet.py index 89184d17..eed3f64d 100644 --- a/scapy/packet.py +++ b/scapy/packet.py @@ -772,7 +772,7 @@ class Packet(six.with_metaclass(Packet_metaclass, BasePacket)): def hide_defaults(self): """Removes fields' values that are the same as default values.""" - for k in list(self.fields.keys()): # use .items(): self.fields is modified in the loop + for k, v in list(self.fields.items()): # use list(): self.fields is modified in the loop v = self.fields[k] if k in self.default_fields: if self.default_fields[k] == v: @@ -907,7 +907,7 @@ values. ccls,fld = cls,None if cls is None or match(self.__class__, cls) or self.__class__.__name__ == ccls: if all(self.getfieldval(fldname) == fldvalue - for fldname, fldvalue in flt.iteritems()): + for fldname, fldvalue in six.iteritems(flt)): if nb == 1: if fld is None: return self -- GitLab