Я пытаюсь отправить сообщения аутентификации на точку доступа, но когда я это делаю, она отправляет 15 аутентификационных сообщений на точку доступа, в результате чего точка доступа не отвечает.Я использую Mac OS X и библиотеку libpcap.
Вот мой код:
int inject(char *src_mac, char *dst_mac)
{
int i, rc;
char *device, *packet;
char error[PCAP_ERRBUF_SIZE];
pcap_t *handle;
device = pcap_lookupdev(error);
handle = pcap_create(device, error);
check(device != NULL, "Failed to find a device!");
check(handle != NULL, "Failed to create handle!");
rc = pcap_set_rfmon(handle, 1);
check(rc == 0, "Failed to set monitor mode!");
rc = pcap_set_promisc(handle, 1);
check(rc == 0, "Failed to set promiscuous mode!");
rc = pcap_activate(handle);
check(rc == 0, "Failed to activate handle!");
rc = pcap_datalink(handle);
check(rc == DLT_IEEE802_11_RADIO, "Failed to use the correct format!");
packet = radiotap_setup(src_mac, dst_mac,\
dst_mac, 0xb0);
rc = pcap_inject(handle, packet,\
RADIO_LEN + sizeof(ieee80211_hdr));
check(rc != -1, "Failed to send packet!");
pcap_close(handle);
return 1;
error:
pcap_close(handle);
return -1;
}
char *radiotap_setup(char *dst_mac, char *src_mac, char *bssid_mac, int fc)
{
int i, radio_len;
unsigned int shost_mac[6], dhost_mac[6], bhost_mac[6];
static char packet[RADIO_LEN + sizeof(ieee80211_hdr)];
ieee80211_hdr ieeeh;
ieeeh.fc = fc;
ieeeh.dur = 314;
sscanf(src_mac, "%x:%x:%x:%x:%x:%x", &shost_mac[0], &shost_mac[1],\
&shost_mac[2], &shost_mac[3], &shost_mac[4], &shost_mac[5]);
sscanf(dst_mac, "%x:%x:%x:%x:%x:%x", &dhost_mac[0], &dhost_mac[1],\
&dhost_mac[2], &dhost_mac[3], &dhost_mac[4], &dhost_mac[5]);
sscanf(bssid_mac, "%x:%x:%x:%x:%x:%x", &bhost_mac[0], &bhost_mac[1],\
&bhost_mac[2], &bhost_mac[3], &bhost_mac[4], &bhost_mac[5]);
for (i = 0; i != 6; i++) {
ieeeh.src[i] = (unsigned char)shost_mac[i];
ieeeh.dest[i] = (unsigned char)dhost_mac[i];
ieeeh.bssid[i] = (unsigned char)bhost_mac[i];
}
ieeeh.seq = rand();
ieeeh.rc = 1792;
radio_len = RADIO_LEN;
memcpy(&packet[2], &radio_len, 2);
memcpy(packet + RADIO_LEN, &ieeeh,\
sizeof(ieee80211_hdr));
return packet;
}
Когда я выполняю код, я получаю это на Wireshark: Вывод Wireshark