#!/usr/bin/env python3
import socket
import struct
import time
import sys

def send_query(qtype, service, target="127.0.0.1", port=5353):
    header = struct.pack('>HHHHHH', 0x1234, 0x0000, 1, 0, 0, 0)
    labels = service.split('.')
    name = b''.join([bytes([len(l)]) + l.encode() for l in labels]) + b'\x00'
    question = name + struct.pack('>HH', qtype, 0x0001)
    packet = header + question
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.settimeout(2)
    try:
        sock.sendto(packet, (target, port))
        type_names = {12: "PTR", 16: "TXT", 33: "SRV", 1: "A"}
        typename = type_names.get(qtype, str(qtype))
        print(f"[*] Sent {typename} query for {service} to {target}:{port}")
    except Exception as e:
        print(f"[!] Error: {e}")
    finally:
        sock.close()

if __name__ == "__main__":
    target = sys.argv[1] if len(sys.argv) > 1 else "127.0.0.1"
    
    print("=== Testing mDNS Query Variants ===")
    
    # Test 1: TXT query variant
    print("\n[1] Testing TXT query variant...")
    send_query(16, "test._http._tcp.local", target)
    time.sleep(1)
    
    # Test 2: SRV query variant  
    print("\n[2] Testing SRV query variant...")
    send_query(33, "test._http._tcp.local", target)
    time.sleep(1)
    
    # Test 3: PTR query (baseline)
    print("\n[3] Testing PTR query (baseline)...")
    send_query(12, "_http._tcp.local", target)
    time.sleep(1)
    
    print("\n[*] All variants sent")
