diff options
Diffstat (limited to 'examples/generate_rtscts')
-rw-r--r-- | examples/generate_rtscts/README.md | 23 | ||||
-rw-r--r-- | examples/generate_rtscts/generate_rtscts.c | 78 |
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 | ||
2 | This 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 | ||
8 | clang -Wall -Werror -O3 -o generate_rtscts -c -o generate_rtscts.o generate_rtscts.c | ||
9 | clang -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 |  | ||
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 | |||
12 | pcap_dumper_t *filedumper = NULL; | ||
13 | |||
14 | void 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 | |||
44 | void helpexit() { | ||
45 | fprintf(stderr, "[!] Usage: ./generate_beacon --file <file.pcap>\n"); | ||
46 | exit(EXIT_FAILURE); | ||
47 | } | ||
48 | |||
49 | int 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 | } | ||