int main(int argc, char **argv) { message_init(); lift_pid = fork(); if(!lift_pid) { lift_process(); } liftmove_pid = fork(); if(!liftmove_pid){ liftmove_process(); } int current_person_id = 0; int j; for(j = 0; j < MAX_N_PERSONS; j++){ pid_t tmp_pid = fork(); if (tmp_pid == 0){ person_process(current_person_id); } else{ person_pid[current_person_id] = tmp_pid; current_person_id ++; } } result_process(); return 0; }
static void search_process(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) { struct search_context *ctx = (struct search_context *)user; struct radiotap_header *rt; struct IEEE_802_11_header *wifi; struct ssid_param *ssid_p; (void)h; rt = (struct radiotap_header *)bytes; wifi = (struct IEEE_802_11_header *)((uint8_t *)bytes + rt->len); if (wifi->type == BEACON_TYPE) { ssid_p = (struct ssid_param *)((uint8_t *)wifi + sizeof(struct IEEE_802_11_header) + MGMT_SSID_OFFSET); if (strlen(ctx->ssid) != ssid_p->ssid_len) // check SSID length return; if (strncmp(ctx->ssid, (char *)&ssid_p->ssid, ssid_p->ssid_len)) // check SSID contents return; memcpy(ctx->bssid, wifi->bssid, MAC_ADDRESS_LENGTH); // capture BSSID of access-point } if (wifi->type == DATA_TYPE) { if ( (!memcmp(wifi->dest_addr, ctx->bssid, MAC_ADDRESS_LENGTH)) || (!memcmp(wifi->src_addr, ctx->bssid, MAC_ADDRESS_LENGTH)) || (!memcmp(wifi->bssid, ctx->bssid, MAC_ADDRESS_LENGTH)) ) { if (memcmp(wifi->dest_addr, ctx->bssid, MAC_ADDRESS_LENGTH)) result_process(ctx->results, wifi->dest_addr); else if (memcmp(wifi->src_addr, ctx->bssid, MAC_ADDRESS_LENGTH)) result_process(ctx->results, wifi->src_addr ); else result_process(ctx->results, wifi->bssid ); } } }