def rx_dispatcher(r, mon_if): """Dispatch received frames to rx queues.""" mng_queue = { Dot11.SUBTYPE["Management"]["Beacon"]: RX_BEACON_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Probe Request"]: RX_PROBE_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Probe Response"]: RX_PROBE_RESP_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Authentication"]: RX_AUTH_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Association Request"]: RX_ASSOC_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Association Response"]: RX_ASSOC_RESP_QUEUE(mon_if), } ps = r.pubsub() ps.subscribe(RX_FRAME_QUEUE(mon_if)) for m in ps.listen(): f = frame(m) # TODO add more reasonable sanity checks if f.type == Dot11.TYPE_MANAGEMENT and mng_queue.has_key(f.subtype): r.publish(mng_queue[f.subtype], f)
def tx_frame(r, mon_if): """Transmit frames received from queue 'TX_FRAME_QUEUE(mon_if)' via monitoring interface 'mon_if'.""" ps = r.pubsub() ps.subscribe(TX_FRAME_QUEUE(mon_if)) for m in ps.listen(): sendp(frame(m), iface = mon_if)
def tx_frame(r, mon_if): """Transmit frames received from queue 'TX_FRAME_QUEUE(mon_if)' via monitoring interface 'mon_if'.""" ps = r.pubsub() ps.subscribe(TX_FRAME_QUEUE(mon_if)) for m in ps.listen(): sendp(frame(m), iface=mon_if)
def rx_eap_dispatcher(r, mon_if): """Dispatch received EAP frames to EAP queues.""" ps = r.pubsub() ps.subscribe(RX_FRAME_QUEUE(mon_if)) for m in ps.listen(): f = frame(m) if f.haslayer(Dot11) and \ f.type == Dot11.TYPE_DATA and \ f.haslayer(EAP): eap = f[EAP] if eap.code == EAP.REQUEST and eap.type == EAP.TYPE_ID: r.publish(RX_EAP_ID_QUEUE(mon_if), f)
def ap_dump(r, mon_if): """Filter for APs and publish their ESSID and BSSID on 'AP_QUEUE(mon_if)'.""" # TODO Evaluate association requests to detect hidden SSIDs. # TODO The function follows a more general pattern to be abstracted. ps = r.pubsub() in_queue = RX_BEACON_QUEUE(mon_if) out_queue = AP_QUEUE(mon_if) ps.subscribe(in_queue) for m in ps.listen(): f = frame(m) # TODO add sanity checks bssid = f.addr3 if f.haslayer(Dot11SSIDElt): essid = f[Dot11SSIDElt].SSID r.publish(out_queue, (essid, bssid))
def rx_dispatcher(r, mon_if): """Dispatch received frames to rx queues.""" mng_queue = { Dot11.SUBTYPE["Management"]["Beacon"] : RX_BEACON_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Probe Request"] : RX_PROBE_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Probe Response"] : RX_PROBE_RESP_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Authentication"] : RX_AUTH_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Association Request"] : RX_ASSOC_QUEUE(mon_if), Dot11.SUBTYPE["Management"]["Association Response"] : RX_ASSOC_RESP_QUEUE(mon_if), } ps = r.pubsub() ps.subscribe(RX_FRAME_QUEUE(mon_if)) for m in ps.listen(): f = frame(m) # TODO add more reasonable sanity checks if f.type == Dot11.TYPE_MANAGEMENT and mng_queue.has_key(f.subtype): r.publish(mng_queue[f.subtype], f)