test.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python3
  2. """GUI /attack Extra(s) panel contains all attack input fields (matches CLI)."""
  3. import sys, subprocess, time, socket, os, signal
  4. err = []
  5. EXPECTED_INPUTS = [
  6. "loic", "loris", "ufosyn", "fraggle", "uforst", "spray", "smurf", "xmas",
  7. "droper", "sniper", "tachyon", "pinger", "monlist", "ufoack", "overlap",
  8. "ufoudp", "nuke",
  9. "memcached", "chargen", "cldap", "ssdp", "qotd", "tftp", "wsdisco", "coap",
  10. "mssql", "arms", "plex", "netbios", "ripv1", "middlebox",
  11. "rapidreset", "slowread", "goldeneye", "finflood",
  12. "dbstress",
  13. ]
  14. proc = subprocess.Popen(
  15. [sys.executable, "ufonet", "--gui"],
  16. stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
  17. preexec_fn=os.setsid,
  18. )
  19. def http_get(path, port=9999, timeout=8):
  20. s = socket.socket(); s.settimeout(timeout)
  21. s.connect(("127.0.0.1", port))
  22. s.sendall(("GET " + path + " HTTP/1.0\r\n\r\n").encode())
  23. chunks = []
  24. while True:
  25. try:
  26. data = s.recv(65536)
  27. if not data: break
  28. chunks.append(data)
  29. except socket.timeout: break
  30. s.close()
  31. return b"".join(chunks).decode("utf-8", errors="replace")
  32. try:
  33. for _ in range(30):
  34. try:
  35. s = socket.socket(); s.settimeout(0.5); s.connect(("127.0.0.1", 9999)); s.close()
  36. break
  37. except Exception:
  38. time.sleep(0.5)
  39. page = http_get("/attack")
  40. for name in EXPECTED_INPUTS:
  41. if f'name="{name}"' not in page:
  42. err.append(f"input name=\"{name}\" missing in /attack Extra(s) panel")
  43. finally:
  44. try: os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
  45. except Exception: pass
  46. proc.wait(timeout=5)
  47. print(f"Expected {len(EXPECTED_INPUTS)} inputs; missing: {len(err)}")
  48. for e in err:
  49. print("FAIL:", e)
  50. sys.exit(0 if not err else 1)