From 39b3002b5eb7c0574284fe510ae3b1290b18e5d6 Mon Sep 17 00:00:00 2001 From: Pierre LALET <pierre.lalet@cea.fr> Date: Sat, 14 Jan 2017 14:28:19 +0100 Subject: [PATCH] Accept None as destination (to use the default route) in SourceIP(6)Field --- scapy/fields.py | 16 ++++++++-------- scapy/layers/inet6.py | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/scapy/fields.py b/scapy/fields.py index 7f48092c..ffd0209d 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -268,15 +268,15 @@ class SourceIPField(IPField): if conf.route is None: # unused import, only to initialize conf.route import scapy.route - dst=getattr(pkt,self.dstname) - if isinstance(dst,Gen): - r = map(conf.route.route, dst) - r.sort() - if r[0] != r[-1]: - warning("More than one possible route for %s"%repr(dst)) - iff,x,gw = r[0] + dst = ("0.0.0.0" if self.dstname is None else + getattr(pkt, self.dstname)) + if isinstance(dst, (Gen, list)): + r = {conf.route.route(daddr) for daddr in dst} + if len(r) > 1: + warning("More than one possible route for %r" % (dst,)) + x = min(r)[1] else: - iff,x,gw = conf.route.route(dst) + x = conf.route.route(dst)[1] return IPField.i2h(self, pkt, x) diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py index dd5929aa..4fa93147 100644 --- a/scapy/layers/inet6.py +++ b/scapy/layers/inet6.py @@ -247,17 +247,17 @@ class SourceIP6Field(IP6Field): return IP6Field.i2m(self, pkt, x) def i2h(self, pkt, x): if x is None: - dst=getattr(pkt,self.dstname) - if isinstance(dst,Gen): - r = map(conf.route6.route, dst) - r.sort() - if r[0] == r[-1]: - x=r[0][1] - else: - warning("More than one possible route for %s"%repr(dst)) - return None + if conf.route6 is None: + # unused import, only to initialize conf.route6 + import scapy.route6 + dst = ("::" if self.dstname is None else getattr(pkt, self.dstname)) + if isinstance(dst, (Gen, list)): + r = {conf.route6.route(daddr) for daddr in dst} + if len(r) > 1: + warning("More than one possible route for %r" % (dst,)) + x = min(r)[1] else: - iff,x,nh = conf.route6.route(dst) + x = conf.route6.route(dst)[1] return IP6Field.i2h(self, pkt, x) class DestIP6Field(IP6Field, DestField): -- GitLab