Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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))
Example #7
0
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))
Example #8
0
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)