test.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/env python3
  2. """scapy-based modules: ensure packet builders construct expected layers (no send)."""
  3. import sys, os
  4. err = []
  5. try:
  6. from scapy.all import IP, TCP, UDP, ICMP, RandShort
  7. except Exception as e:
  8. print("scapy import FAILED:", e)
  9. sys.exit(1)
  10. dst = "127.0.0.1"
  11. def assert_pkt(name, pkt, *layers):
  12. for L in layers:
  13. if not pkt.haslayer(L):
  14. err.append(f"{name}: missing layer {L.__name__}")
  15. p_syn = IP(dst=dst, flags='MF', ttl=64) / TCP(sport=RandShort(), dport=80, flags='S')
  16. assert_pkt("ufosyn-style", p_syn, IP, TCP)
  17. if str(p_syn[TCP].flags) != 'S':
  18. err.append(f"ufosyn: flags expected S, got {p_syn[TCP].flags}")
  19. p_xmas = IP(dst=dst, flags='MF') / TCP(sport=RandShort(), dport=80, flags='FPU')
  20. assert_pkt("xmas-style", p_xmas, IP, TCP)
  21. if not all(c in str(p_xmas[TCP].flags) for c in 'FPU'):
  22. err.append(f"xmas: missing FPU flags, got {p_xmas[TCP].flags}")
  23. p_ack = IP(dst=dst) / TCP(sport=RandShort(), dport=80, flags='A')
  24. assert_pkt("ufoack-style", p_ack, IP, TCP)
  25. p_rst = IP(dst=dst) / TCP(sport=RandShort(), dport=80, flags='R')
  26. assert_pkt("uforst-style", p_rst, IP, TCP)
  27. p_udp = IP(dst=dst) / UDP(sport=RandShort(), dport=53) / (b"\x00" * 32)
  28. assert_pkt("ufoudp-style", p_udp, IP, UDP)
  29. p_ping = IP(dst=dst) / ICMP()
  30. assert_pkt("pinger-style", p_ping, IP, ICMP)
  31. p_frag = IP(dst=dst, frag=1, flags='MF') / TCP(sport=RandShort(), dport=80) / (b"A" * 64)
  32. assert_pkt("droper-style", p_frag, IP, TCP)
  33. print("packet builders OK" if not err else "packet builders FAILED")
  34. for e in err:
  35. print("FAIL:", e)
  36. sys.exit(0 if not err else 1)