diff --git a/scapy/route.py b/scapy/route.py index a6595d08b98fa9f578a9182e3392064c1893a00a..14e24473e04696bfd43feafe3abf5b8fc24db609 100644 --- a/scapy/route.py +++ b/scapy/route.py @@ -12,6 +12,7 @@ from scapy.consts import LOOPBACK_NAME from scapy.utils import atol,ltoa,itom from scapy.config import conf from scapy.error import Scapy_Exception,warning +from scapy.arch import WINDOWS ############################## ## Routing/Interfaces stuff ## @@ -89,7 +90,10 @@ class Route: for i, route in enumerate(self.routes): net, msk, gw, iface, addr = route - if iface != iff: + if WINDOWS: + if iff.guid != iface.guid: + continue + elif iff != iface: continue if gw == '0.0.0.0': self.routes[i] = (the_net,the_msk,gw,iface,the_addr) @@ -103,8 +107,12 @@ class Route: self.invalidate_cache() new_routes=[] for rt in self.routes: - if rt[3] != iff: - new_routes.append(rt) + if WINDOWS: + if iff.guid == rt[3].guid: + continue + elif iff == rt[3]: + continue + new_routes.append(rt) self.routes=new_routes def ifadd(self, iff, addr): @@ -157,9 +165,15 @@ class Route: def get_if_bcast(self, iff): for net, msk, gw, iface, addr in self.routes: - if (iff == iface and net != 0L): - bcast = atol(addr)|(~msk&0xffffffffL); # FIXME: check error in atol() - return ltoa(bcast); + if net == 0: + continue + if WINDOWS: + if iff.guid != iface.guid: + continue + elif iff != iface: + continue + bcast = atol(addr)|(~msk&0xffffffffL); # FIXME: check error in atol() + return ltoa(bcast) warning("No broadcast address found for iface %s\n" % iff); conf.route=Route() diff --git a/test/regression.uts b/test/regression.uts index d5fdaf3bdd0b2418474e66b93ec9a4c356e680e1..11052b8440ed4008ba7ee7ad42744a223570d540 100644 --- a/test/regression.uts +++ b/test/regression.uts @@ -51,6 +51,8 @@ get_if_raw_addr(get_dummy_interface()) get_if_list() +get_if_raw_addr6(conf.iface6) + = Test read_routes6() - default output routes6 = read_routes6() @@ -7368,16 +7370,19 @@ in6_getscope("::1") == IPV6_ADDR_LOOPBACK = make_route() r4 = Route() -len_r4 = len(r4.routes) -r4.make_route(host="10.12.13.14") == (168561934, 4294967295L, '0.0.0.0', LOOPBACK_NAME, '0.0.0.0') -r4.make_route(net="10.12.13.0/24") == (168561920, 4294967040L, '0.0.0.0', LOOPBACK_NAME, '0.0.0.0') -r4.make_route(net="10.12.0.0/16", dev=get_dummy_interface()) == (168558592, 4294901760L, '0.0.0.0', get_dummy_interface(), '0.0.0.0') +tmp_route = r4.make_route(host="10.12.13.14") +(tmp_route[0], tmp_route[1], tmp_route[2]) == (168561934, 4294967295L, '0.0.0.0') + +tmp_route = r4.make_route(net="10.12.13.0/24") +(tmp_route[0], tmp_route[1], tmp_route[2]) == (168561920, 4294967040L, '0.0.0.0') = add() & delt() -r4.add(net="192.168.1.0/24", gw="1.2.3.4", dev=get_dummy_interface()) +r4 = Route() +len_r4 = len(r4.routes) +r4.add(net="192.168.1.0/24", gw="1.2.3.4") len(r4.routes) == len_r4 + 1 -r4.delt(net="192.168.1.0/24", gw="1.2.3.4", dev=get_dummy_interface()) +r4.delt(net="192.168.1.0/24", gw="1.2.3.4") len(r4.routes) == len_r4 = ifchange() @@ -7393,10 +7398,16 @@ len(r4.routes) == len_r4 = ifadd() & get_if_bcast() +r4 = Route() +len_r4 = len(r4.routes) + r4.ifadd(get_dummy_interface(), "1.2.3.4/24") +len(r4.routes) == len_r4 +1 + r4.get_if_bcast(get_dummy_interface()) == "1.2.3.255" r4.ifdel(get_dummy_interface()) +print len(r4.routes), len_r4 len(r4.routes) == len_r4