Estoy intentando enviar una solicitud de sonda a los puntos de acceso. Pero cada vez que envío un paquete de solicitud de sonda, se rellena con 0, es decir, veo dos paquetes en wireshark para cada paquete que envío: un paquete no acolchado y un paquete acolchado 0 al final. El relleno cambia el significado de las etiquetas en el paquete y wireshark declara el segundo paquete como un paquete con formato incorrecto. ¿Cómo elimino este relleno? También porque veo dos paquetes aunque solo envío uno.
Aquí está la función de paquete que crea el paquete:
int build_beacon(char *buf, struct network_t *n) {
char *b = buf;
/* prepend a minimal radiotap header */
memset(b, 0x00, 13);
b[2] = 13;
b+=4;
b = append_to_buf(b, "\x04\x80\x02\x00", 4); /*Set flags*/
b = append_to_buf(b, "\x02", 1); /*Set bit rate*/
b+=4;
b = append_to_buf(b, "\x40\x00\x00\x00", 4); /* IEEE802.11 probe request */
b = append_to_buf(b, n->dst, sizeof(mac_t)); /* destination */
b = append_to_buf(b, n->mac, sizeof(mac_t)); /* source */
b = append_to_buf(b, n->mac, sizeof(mac_t)); /* BSSID */
/* sequence number */
*(b++) = n->seq >> 8;
*(b++) = n->seq & 0x00FF;
n->seq++;
*(b++) = 0; /* tag essid */
*(b++) = strlen(n->ssid);
b = append_str(b, n->ssid);
/*supported rates*/
b = append_to_buf(b, "\x01\x08\x02\x04\x0b\x16\x0c\x12\x18\x24", 10);
/*add channel*/
b = append_to_buf(b, "\x03\x01", 2); /* the channel we are currently on.*/
*(b++) = n->channel;
*(b++) = 10; /* tag request info element essid */
*(b++) = 3; /*size of request info*/
b = append_to_buf(b, "\x00\x07\xdd", 3);
/*HT capability*/
b = append_to_buf(b, "\x2d\x1a\x3c\x09\x17\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 28);
/*extended supported rates*/
b = append_to_buf(b, "\x32\x04\x30\x48\x60\x6c", 6);
return (b-buf);
}
Aquí hay una instantánea de los dos paquetes:
Aquíestáelpaquetesinrelleno:
Aquí está el paquete con 0 rellenado. La marca de color es donde comienza el relleno.