/* Authenticate ourselves with the AP */ void authenticate() { const void *radio_tap = NULL, *dot11_frame = NULL, *management_frame = NULL, *packet = NULL; size_t radio_tap_len = 0, dot11_frame_len = 0, management_frame_len = 0, packet_len = 0; radio_tap = build_radio_tap_header(&radio_tap_len); dot11_frame = build_dot11_frame_header(FC_AUTHENTICATE, &dot11_frame_len); management_frame = build_authentication_management_frame(&management_frame_len); packet_len = radio_tap_len + dot11_frame_len + management_frame_len; if(radio_tap && dot11_frame && management_frame) { packet = malloc(packet_len); if(packet) { memset((void *) packet, 0, packet_len); memcpy((void *) packet, radio_tap, radio_tap_len); memcpy((void *) ((char *) packet+radio_tap_len), dot11_frame, dot11_frame_len); memcpy((void *) ((char *) packet+radio_tap_len+dot11_frame_len), management_frame, management_frame_len); pcap_inject(get_handle(), packet, packet_len); free((void *) packet); } } if(radio_tap) free((void *) radio_tap); if(dot11_frame) free((void *) dot11_frame); if(management_frame) free((void *) management_frame); return; }
/* Authenticate ourselves with the AP */ static void authenticate(void) { size_t radio_tap_len, dot11_frame_len, management_frame_len, packet_len, offset; struct radio_tap_header radio_tap; struct dot11_frame_header dot11_frame; struct authentication_management_frame management_frame; radio_tap_len = build_radio_tap_header(&radio_tap); dot11_frame_len = build_dot11_frame_header(&dot11_frame, FC_AUTHENTICATE); management_frame_len = build_authentication_management_frame(&management_frame); packet_len = radio_tap_len + dot11_frame_len + management_frame_len; unsigned char packet[ sizeof (struct radio_tap_header) + sizeof (struct dot11_frame_header) + sizeof (struct authentication_management_frame)]; assert(packet_len == sizeof packet); offset = 0; memcpy(packet + offset, &radio_tap, radio_tap_len); offset += radio_tap_len; memcpy(packet + offset, &dot11_frame, dot11_frame_len); offset += dot11_frame_len; memcpy(packet + offset, &management_frame, management_frame_len); send_packet(packet, packet_len, 1); cprintf(VERBOSE, "[+] Sending authentication request\n"); }