about summary refs log tree commit diff stats
path: root/examples/generate_rtscts/generate_rtscts.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/generate_rtscts/generate_rtscts.c')
-rw-r--r--examples/generate_rtscts/generate_rtscts.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/examples/generate_rtscts/generate_rtscts.c b/examples/generate_rtscts/generate_rtscts.c new file mode 100644 index 0000000..f449a06 --- /dev/null +++ b/examples/generate_rtscts/generate_rtscts.c
@@ -0,0 +1,78 @@
1#include <libwifi.h>
2
3#include <pcap.h>
4
5#include <bits/types/struct_timeval.h>
6#include <stddef.h>
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10#include <sys/time.h>
11
12pcap_dumper_t *filedumper = NULL;
13
14void create_write_rtscts() {
15 printf("[*] Creating RTS Frame\n");
16 struct libwifi_rts rts = {0};
17 unsigned char transmitter[6] = "\x00\x20\x91\xAA\xBB\xCC";
18 unsigned char receiver[6] = "\xFF\xFF\xFF\xFF\xFF\xFF";
19 libwifi_create_rts(&rts, transmitter, receiver, 32);
20
21 printf("[*] Writing RTS Frame to pcap\n");
22 struct pcap_pkthdr pkt_hdr = {0};
23 struct timeval tv = {0};
24 pkt_hdr.caplen = sizeof(struct libwifi_rts);
25 pkt_hdr.len = sizeof(struct libwifi_rts);
26 gettimeofday(&tv, NULL);
27 pkt_hdr.ts = tv;
28 pcap_dump((unsigned char *) filedumper, &pkt_hdr, (const unsigned char *) &rts);
29
30 printf("[*] Creating CTS Frame\n");
31 struct libwifi_cts cts = {0};
32 libwifi_create_cts(&cts, receiver, 32);
33
34 printf("[*] Writing CTS Frame to pcap\n");
35 memset(&pkt_hdr, 0, sizeof(struct pcap_pkthdr));
36 memset(&tv, 0, sizeof(struct timeval));
37 pkt_hdr.caplen = sizeof(struct libwifi_cts);
38 pkt_hdr.len = sizeof(struct libwifi_cts);
39 gettimeofday(&tv, NULL);
40 pkt_hdr.ts = tv;
41 pcap_dump((unsigned char *) filedumper, &pkt_hdr, (const unsigned char *) &cts);
42}
43
44void helpexit() {
45 fprintf(stderr, "[!] Usage: ./generate_beacon --file <file.pcap>\n");
46 exit(EXIT_FAILURE);
47}
48
49int main(int argc, char **argv) {
50 pcap_t *handle = NULL;
51 char errbuf[PCAP_ERRBUF_SIZE] = {0};
52 FILE *pcapfile = NULL;
53
54 if (argc < 2) {
55 helpexit();
56 }
57 if (strcmp(argv[1], "--file") == 0) {
58 pcapfile = fopen(argv[2], "w+");
59 if ((handle = pcap_open_dead(DLT_IEEE802_11, BUFSIZ)) == NULL) {
60 fprintf(stderr, "[!] Error opening dead capture (%s)\n", errbuf);
61 exit(EXIT_FAILURE);
62 }
63 if ((filedumper = pcap_dump_fopen(handle, pcapfile)) == NULL) {
64 fprintf(stderr, "[!] Error opening file %s (%s)\n", argv[2], errbuf);
65 exit(EXIT_FAILURE);
66 }
67 } else {
68 helpexit();
69 }
70
71 printf("[+] Setup Complete\n");
72
73 create_write_rtscts();
74
75 pcap_dump_close(filedumper);
76 pcap_close(handle);
77 return 0;
78}