| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #!/usr/bin/env python3
- """GUI /attack Extra(s) panel contains all attack input fields (matches CLI)."""
- import sys, subprocess, time, socket, os, signal
- err = []
- EXPECTED_INPUTS = [
- "loic", "loris", "ufosyn", "fraggle", "uforst", "spray", "smurf", "xmas",
- "droper", "sniper", "tachyon", "pinger", "monlist", "ufoack", "overlap",
- "ufoudp", "nuke",
- "memcached", "chargen", "cldap", "ssdp", "qotd", "tftp", "wsdisco", "coap",
- "mssql", "arms", "plex", "netbios", "ripv1", "middlebox",
- "rapidreset", "slowread", "goldeneye", "finflood",
- "dbstress",
- ]
- proc = subprocess.Popen(
- [sys.executable, "ufonet", "--gui"],
- stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
- preexec_fn=os.setsid,
- )
- def http_get(path, port=9999, timeout=8):
- s = socket.socket(); s.settimeout(timeout)
- s.connect(("127.0.0.1", port))
- s.sendall(("GET " + path + " HTTP/1.0\r\n\r\n").encode())
- chunks = []
- while True:
- try:
- data = s.recv(65536)
- if not data: break
- chunks.append(data)
- except socket.timeout: break
- s.close()
- return b"".join(chunks).decode("utf-8", errors="replace")
- try:
- for _ in range(30):
- try:
- s = socket.socket(); s.settimeout(0.5); s.connect(("127.0.0.1", 9999)); s.close()
- break
- except Exception:
- time.sleep(0.5)
- page = http_get("/attack")
- for name in EXPECTED_INPUTS:
- if f'name="{name}"' not in page:
- err.append(f"input name=\"{name}\" missing in /attack Extra(s) panel")
- finally:
- try: os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
- except Exception: pass
- proc.wait(timeout=5)
- print(f"Expected {len(EXPECTED_INPUTS)} inputs; missing: {len(err)}")
- for e in err:
- print("FAIL:", e)
- sys.exit(0 if not err else 1)
|