| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #!/usr/bin/env python3
- """Abductor: connects to a local target without raising."""
- import sys, os, ssl, urllib.request, time
- sys.path.insert(0, os.path.abspath("test"))
- from _lib.local_target import http_target
- from core.tools.abductor import Abductor
- err = []
- class _UFOMin:
- def __init__(self):
- self.options = type("O", (), dict(proxy=None))()
- self.user_agent = "Mozilla/5.0 UFONet-test"
- self.referer = "https://example.com"
- self.agents = [self.user_agent]
- self.ctx = ssl.create_default_context()
- self.ctx.check_hostname = False
- self.ctx.verify_mode = ssl.CERT_NONE
- ufo = _UFOMin()
- a = Abductor(ufo)
- with http_target() as (port, counter):
- target = f"http://127.0.0.1:{port}/"
- try:
- with urllib.request.urlopen(target, timeout=5) as r:
- _ = r.read()
- except Exception as e:
- err.append(f"raw urlopen probe failed: {type(e).__name__}: {e}")
- try:
- a.establish_connection(target)
- except SystemExit:
- pass
- except Exception as e:
- err.append(f"abductor raised: {type(e).__name__}: {e}")
- _deadline = time.time() + 3
- while counter["get"] < 1 and time.time() < _deadline:
- time.sleep(0.1)
- if counter["get"] < 1:
- err.append(f"abductor performed no GET (got {counter['get']})")
- print(f"abductor_get_hits={counter['get']}")
- for e in err:
- print("FAIL:", e)
- sys.exit(0 if not err else 1)
|