about summary refs log tree commit diff stats
path: root/examples/generate_rtscts
diff options
context:
space:
mode:
authorMarc <foxtrot@malloc.me>2021-11-30 22:39:26 +0000
committerMarc <foxtrot@malloc.me>2021-12-01 16:54:44 +0000
commitae6c98a48da409d040604aeffb84a38155fb5bac (patch)
treec27a8e28972209581ce3fba2130bf0c2b4f9c9c0 /examples/generate_rtscts
downloadlibwifi-ae6c98a48da409d040604aeffb84a38155fb5bac.tar.gz
libwifi-ae6c98a48da409d040604aeffb84a38155fb5bac.tar.bz2
libwifi-ae6c98a48da409d040604aeffb84a38155fb5bac.zip
Initial Commit
Signed-off-by: Marc <foxtrot@malloc.me>
Diffstat (limited to 'examples/generate_rtscts')
-rw-r--r--examples/generate_rtscts/README.md23
-rw-r--r--examples/generate_rtscts/generate_rtscts.c78
2 files changed, 101 insertions, 0 deletions
diff --git a/examples/generate_rtscts/README.md b/examples/generate_rtscts/README.md new file mode 100644 index 0000000..a7db7c2 --- /dev/null +++ b/examples/generate_rtscts/README.md
@@ -0,0 +1,23 @@
1# Generating 802.11 RTS and CTS Frames
2This example shows the reader how to generate an RTS and a CTS Frame, with a random transmitter and a 32ms duration.
3
4# Building and Using
5```
6>> cd examples/generate_rtscts/
7>> make
8clang -Wall -Werror -O3 -o generate_rtscts -c -o generate_rtscts.o generate_rtscts.c
9clang -Wall -Werror -O3 -o generate_rtscts generate_rtscts.c -lpcap -lwifi
10>> ./generate_rtscts --file rtscts.pcap
11[+] Setup Complete
12[*] Creating RTS Frame
13[*] Writing RTS Frame to pcap
14[*] Creating CTS Frame
15[*] Writing CTS Frame to pcap
16>> tshark -r rtscts.pcap
17 1 0.000000 J125Nati_aa:bb:cc (00:20:91:aa:bb:cc) (TA) → Broadcast (ff:ff:ff:ff:ff:ff) (RA) 802.11 16 Request-to-send, Flags=........
18 2 0.000008 → Broadcast (ff:ff:ff:ff:ff:ff) (RA) 802.11 10 Clear-to-send, Flags=........
19>>
20```
21
22# Output
23![image](https://user-images.githubusercontent.com/4153572/143601868-da7e9c99-2534-4fe6-9608-68f5af1ad882.png)
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}