Exemplo n.º 1
0
    def generateFilters(self):
        """Build the list of callables, ``filters``, according to the current
        contents of the lists of ``transports``, ``notBlockedIn``, and the
        ``ipVersion``.
        """
        self.clearFilters()

        pt = self.justOnePTType()
        msg = ("Adding a filter to %s for %s for IPv%d" %
               (self.__class__.__name__, self.client, self.ipVersion))

        # If this bridge runs any active probing-resistant PTs, we should
        # *only* hand out its active probing-resistant PTs.  Otherwise, a
        # non-resistant PT would get this bridge scanned and blocked:
        # <https://bugs.torproject.org/28655>
        self.addFilter(byProbingResistance(pt, self.ipVersion))

        if self.notBlockedIn:
            for country in self.notBlockedIn:
                logging.info("%s %s bridges not blocked in %s..." %
                             (msg, pt or "vanilla", country))
                self.addFilter(
                    byNotBlockedIn(country, pt or "vanilla", self.ipVersion))
        elif pt:
            logging.info("%s %s bridges..." % (msg, pt))
            self.addFilter(byTransport(pt, self.ipVersion))
        else:
            logging.info("%s bridges..." % msg)
            self.addFilter(byIPv(self.ipVersion))
Exemplo n.º 2
0
 def test_byTransport_with_transport_ipv6(self):
     """A bridge with an IPv6 voltron transport should cause
     byTransport('voltron', ipVersion=6) to return True.
     """
     self.addIPv6VoltronPT()
     filtre = filters.byTransport('voltron', ipVersion=6)
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 3
0
 def test_byTransport_wrong_transport(self):
     """A bridge with only a Voltron transport should cause
     byTransport('obfs3') to return False.
     """
     self.addIPv4VoltronPT()
     filtre = filters.byTransport('obfs3')
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 4
0
 def test_byTransport_wrong_transport(self):
     """A bridge with only a Voltron transport should cause
     byTransport('obfs3') to return False.
     """
     self.addIPv4VoltronPT()
     filtre = filters.byTransport('obfs3')
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 5
0
 def test_byTransport_vanilla_ipv6(self):
     """byTranspfort(ipVersion=6) without namimg a transport to filter by
     should just return the bridge's IPv4 address.
     """
     self.bridge.orAddresses = [(ipaddr.IPv6Address('2006:3333::3333'), 3333, 6)]
     filtre = filters.byTransport(ipVersion=6)
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 6
0
 def test_byTransport_with_transport_ipv6_filtering_by_ipv4(self):
     """A bridge with an IPv6 voltron transport should cause
     byTransport('voltron') to return True.
     """
     self.addIPv6VoltronPT()
     filtre = filters.byTransport('voltron')
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 7
0
 def test_byTransport_with_transport_ipv6(self):
     """A bridge with an IPv6 voltron transport should cause
     byTransport('voltron', ipVersion=6) to return True.
     """
     self.addIPv6VoltronPT()
     filtre = filters.byTransport('voltron', ipVersion=6)
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 8
0
 def test_byTransport_with_transport_ipv6_filtering_by_ipv4(self):
     """A bridge with an IPv6 voltron transport should cause
     byTransport('voltron') to return True.
     """
     self.addIPv6VoltronPT()
     filtre = filters.byTransport('voltron')
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 9
0
 def test_byTransport_vanilla_ipv6(self):
     """byTranspfort(ipVersion=6) without namimg a transport to filter by
     should just return the bridge's IPv4 address.
     """
     self.bridge.orAddresses = [(ipaddr.IPv6Address('2006:3333::3333'),
                                 3333, 6)]
     filtre = filters.byTransport(ipVersion=6)
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 10
0
 def test_byFilters_bySubring_byTransport_wrong_subhashring_no_transport(self):
     """Filtering byTransport('voltron') and bySubring(HMAC, 2, 2) when the
     Bridge has no transports and is assigned to sub-hashring 1-of-2
     should return False.
     """
     filtre = filters.byFilters([filters.bySubring(self.hmac, 2, 2),
                                 filters.byTransport('voltron')])
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 11
0
 def test_byFilters_bySubring_byTransport_correct_subhashring_with_transport(self):
     """Filtering byTransport('voltron') and bySubring(HMAC, 1, 2) when the
     Bridge has a voltron transport and is assigned to sub-hashring 1-of-2
     should return True.
     """
     self.addIPv4VoltronPT()
     filtre = filters.byFilters([filters.bySubring(self.hmac, 1, 2),
                                 filters.byTransport('voltron')])
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 12
0
 def test_byFilters_bySubring_byTransport_correct_subhashring_no_transport(
         self):
     """Filtering byTransport('voltron') and bySubring(HMAC, 1, 2) when the
     Bridge has no transports and is assigned to sub-hashring 1-of-2
     should return False.
     """
     filtre = filters.byFilters([
         filters.bySubring(self.hmac, 1, 2),
         filters.byTransport('voltron')
     ])
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 13
0
 def test_byFilters_bySubring_byTransport_wrong_subhashring_with_transport(
         self):
     """Filtering byTransport('voltron') and bySubring(HMAC, 2, 2) when the
     Bridge has a voltron transport and is assigned to sub-hashring 1-of-2
     should return False.
     """
     self.addIPv4VoltronPT()
     filtre = filters.byFilters([
         filters.bySubring(self.hmac, 2, 2),
         filters.byTransport('voltron')
     ])
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 14
0
    def generateFilters(self):
        """Build the list of callables, ``filters``, according to the current
        contents of the lists of ``transports``, ``notBlockedIn``, and the
        ``ipVersion``.
        """
        self.clearFilters()

        pt = self.justOnePTType()
        msg = ("Adding a filter to %s for %s for IPv%d"
               % (self.__class__.__name__, self.client, self.ipVersion))

        if self.notBlockedIn:
            for country in self.notBlockedIn:
                logging.info("%s %s bridges not blocked in %s..." %
                             (msg, pt or "vanilla", country))
                self.addFilter(byNotBlockedIn(country, pt, self.ipVersion))
        elif pt:
            logging.info("%s %s bridges..." % (msg, pt))
            self.addFilter(byTransport(pt, self.ipVersion))
        else:
            logging.info("%s bridges..." % msg)
            self.addFilter(byIPv(self.ipVersion))
Exemplo n.º 15
0
 def test_byTransport_no_transports(self):
     """A bridge without any transports should cause
     byTransport('voltron') to return False.
     """
     filtre = filters.byTransport('voltron')
     self.assertFalse(filtre(self.bridge))
Exemplo n.º 16
0
 def test_byTransport_vanilla_ipv4(self):
     """byTransport() without namimg a transport to filter by should just
     return the bridge's IPv4 address.
     """
     filtre = filters.byTransport()
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 17
0
 def test_byTransport_vanilla_ipv4(self):
     """byTransport() without namimg a transport to filter by should just
     return the bridge's IPv4 address.
     """
     filtre = filters.byTransport()
     self.assertTrue(filtre(self.bridge))
Exemplo n.º 18
0
 def test_byTransport_no_transports(self):
     """A bridge without any transports should cause
     byTransport('voltron') to return False.
     """
     filtre = filters.byTransport('voltron')
     self.assertFalse(filtre(self.bridge))