code: def url_permutations(url):
          
          def url_host_permutations(host):
              if re.match(r'\d+\.\d+\.\d+\.\d+', host):
                  yield host
                  return
              parts = host.split('.')
              l = min(len(parts), 5)
              if l > 4:
                  yield host
              for i in range(l - 1):
                  yield '.'.join(parts[i - l:])
  
          def url_path_permutations(path):
              yield path
              query = None
              if '?' in path:
                  path, query = path.split('?', 1)
              if query is not None:
                  yield path
              path_parts = path.split('/')[0:-1]
              curr_path = ''
              for i in range(min(4, len(path_parts))):
                  curr_path = curr_path + path_parts[i] + '/'
                  yield curr_path
  
          protocol, address_str = urllib.splittype(url)
          host, path = urllib.splithost(address_str)
          user, host = urllib.splituser(host)
          host, port = urllib.splitport(host)
          host = host.strip('/')
          seen_permutations = set()
          for h in url_host_permutations(host):
              for p in url_path_permutations(path):
                  u = '{}{}'.format(h, p)
                  if u not in seen_permutations:
                      yield u
                      seen_permutations.add(u)
docs: Try all permutations of hostname and path which can be applied
  
          to blacklisted URLs