test.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env python3
  2. """Abductor: connects to a local target without raising."""
  3. import sys, os, ssl, urllib.request, time
  4. sys.path.insert(0, os.path.abspath("test"))
  5. from _lib.local_target import http_target
  6. from core.tools.abductor import Abductor
  7. err = []
  8. class _UFOMin:
  9. def __init__(self):
  10. self.options = type("O", (), dict(proxy=None))()
  11. self.user_agent = "Mozilla/5.0 UFONet-test"
  12. self.referer = "https://example.com"
  13. self.agents = [self.user_agent]
  14. self.ctx = ssl.create_default_context()
  15. self.ctx.check_hostname = False
  16. self.ctx.verify_mode = ssl.CERT_NONE
  17. ufo = _UFOMin()
  18. a = Abductor(ufo)
  19. with http_target() as (port, counter):
  20. target = f"http://127.0.0.1:{port}/"
  21. try:
  22. with urllib.request.urlopen(target, timeout=5) as r:
  23. _ = r.read()
  24. except Exception as e:
  25. err.append(f"raw urlopen probe failed: {type(e).__name__}: {e}")
  26. try:
  27. a.establish_connection(target)
  28. except SystemExit:
  29. pass
  30. except Exception as e:
  31. err.append(f"abductor raised: {type(e).__name__}: {e}")
  32. _deadline = time.time() + 3
  33. while counter["get"] < 1 and time.time() < _deadline:
  34. time.sleep(0.1)
  35. if counter["get"] < 1:
  36. err.append(f"abductor performed no GET (got {counter['get']})")
  37. print(f"abductor_get_hits={counter['get']}")
  38. for e in err:
  39. print("FAIL:", e)
  40. sys.exit(0 if not err else 1)