int8_t dot1x_learn_packet(struct attacks *attacks, char *iface, u_int8_t *stop, void *data, struct pcap_pkthdr *header) { struct dot1x_data *dot1x_data; struct pcap_data pcap_aux; u_int8_t *packet, got_802_1x_pkt = 0; u_int16_t *cursor; dlist_t *p; struct interface_data *iface_data; dot1x_data = data; if ((packet = calloc(1, SNAPLEN)) == NULL) return -1; if (iface) { p = dlist_search(attacks->used_ints->list, attacks->used_ints->cmp, iface); if (!p) return -1; iface_data = (struct interface_data *) dlist_data(p); } else iface_data = NULL; while (!got_802_1x_pkt && !(*stop)) { interfaces_get_packet(attacks->used_ints, iface_data, stop, header, packet, PROTO_DOT1X, NO_TIMEOUT); if (*stop) { free(packet); return -1; } cursor = (u_int16_t *)(packet + 12); pcap_aux.header = header; pcap_aux.packet = packet; if (!dot1x_load_values((struct pcap_data *)&pcap_aux, dot1x_data)) got_802_1x_pkt = 1; } /* While got */ free(packet); return 0; }
int8_t dot1x_learn_packet( struct attacks *attacks, char *iface, u_int8_t *stop, void *data, struct pcap_pkthdr *header ) { struct dot1x_data *dot1x_data = (struct dot1x_data *)data; struct interface_data *iface_data; struct pcap_data pcap_aux; u_int8_t *packet, got_802_1x_pkt = 0; int8_t ret = -1 ; dlist_t *p; if ( iface ) { p = dlist_search( attacks->used_ints->list, attacks->used_ints->cmp, iface ); if (!p) return -1; iface_data = (struct interface_data *) dlist_data(p); } else iface_data = NULL; packet = (u_int8_t *)calloc( 1, SNAPLEN ); if ( packet ) { while ( !got_802_1x_pkt && !(*stop) ) { interfaces_get_packet( attacks->used_ints, iface_data, stop, header, packet, PROTO_DOT1X, NO_TIMEOUT ); if ( !(*stop) ) { pcap_aux.header = header; pcap_aux.packet = packet; if ( !dot1x_load_values( (struct pcap_data *)&pcap_aux, dot1x_data ) ) { got_802_1x_pkt = 1; ret = 0 ; } } } free(packet); } return ret ; }