From baa3e864bb1c4ab964e7dfa3c58ceeb4a70273c9 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Thu, 1 May 2025 13:16:29 -0500 Subject: [PATCH] Add channel argument to main function for monitor interface configuration --- listener.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/listener.py b/listener.py index 815bfb0..2ca4d5d 100755 --- a/listener.py +++ b/listener.py @@ -23,6 +23,7 @@ ssid_signals = defaultdict(list) # SSID -> list of dBm ap_clients = defaultdict(lambda: defaultdict(int)) target_ap_bssid = None beacon_counts = defaultdict(int) +current_channel = None # === Signal handling === def stop_sniff(signum, frame): @@ -174,6 +175,8 @@ def main(): parser.add_argument("--main-iface", required=True, help="Active interface (used to determine channel)") parser.add_argument("--monitor-iface", required=True, help="Monitor interface to sniff on") parser.add_argument("--outfile", required=True, help="CSV file to append metrics row") + parser.add_argument("--channel", type=int, help="Channel to lock monitor interface to (overrides main iface)") + args = parser.parse_args() reset_interface(args.monitor_iface) @@ -182,29 +185,37 @@ def main(): print(f" Main interface: {args.main_iface}") print(f" Monitor interface: {args.monitor_iface}") print(f" Output file: {args.outfile}") + if args.channel: + print(f" Override channel: {args.channel}") - channel = get_current_channel(args.main_iface) - if channel: - set_monitor_channel(args.monitor_iface, channel) + global target_ap_bssid + global current_channel + + current_channel = args.channel or get_current_channel(args.main_iface) + if current_channel: + set_monitor_channel(args.monitor_iface, current_channel) else: print("[!] Could not determine current channel. Exiting.") sys.exit(1) - global target_ap_bssid - target_ap_bssid = get_connected_bssid(args.main_iface) - if not target_ap_bssid: - print("[!] Could not determine connected BSSID. ClientsOnAP will be 0.") + if not args.channel: + target_ap_bssid = get_connected_bssid(args.main_iface) + if not target_ap_bssid: + print("[!] Could not determine connected BSSID. ClientsOnAP will be 0.") + else: + print(f"[+] Connected BSSID (target AP): {target_ap_bssid}") else: - print(f"[+] Connected BSSID (target AP): {target_ap_bssid}") + target_ap_bssid = None # Can't determine AP if we're not associated print("[+] Sniffing... (waiting for SIGINT to stop)") + while running: sniff(iface=args.monitor_iface, prn=handle_packet, store=False, timeout=5) write_csv(args.outfile) print("\n[+] Final APs counted on this channel:") - + for bssid in sorted(aps): ssid = ssid_map.get(bssid, "") print(f" - {bssid} (SSID: {ssid})")