From ae6c98a48da409d040604aeffb84a38155fb5bac Mon Sep 17 00:00:00 2001 From: Marc Date: Tue, 30 Nov 2021 22:39:26 +0000 Subject: Initial Commit Signed-off-by: Marc --- examples/generate_rtscts/README.md | 23 +++++++++ examples/generate_rtscts/generate_rtscts.c | 78 ++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 examples/generate_rtscts/README.md create mode 100644 examples/generate_rtscts/generate_rtscts.c (limited to 'examples/generate_rtscts') 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 @@ +# Generating 802.11 RTS and CTS Frames +This example shows the reader how to generate an RTS and a CTS Frame, with a random transmitter and a 32ms duration. + +# Building and Using +``` +>> cd examples/generate_rtscts/ +>> make +clang -Wall -Werror -O3 -o generate_rtscts -c -o generate_rtscts.o generate_rtscts.c +clang -Wall -Werror -O3 -o generate_rtscts generate_rtscts.c -lpcap -lwifi +>> ./generate_rtscts --file rtscts.pcap +[+] Setup Complete +[*] Creating RTS Frame +[*] Writing RTS Frame to pcap +[*] Creating CTS Frame +[*] Writing CTS Frame to pcap +>> tshark -r rtscts.pcap + 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=........ + 2 0.000008 → Broadcast (ff:ff:ff:ff:ff:ff) (RA) 802.11 10 Clear-to-send, Flags=........ +>> +``` + +# Output +![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 @@ +#include + +#include + +#include +#include +#include +#include +#include +#include + +pcap_dumper_t *filedumper = NULL; + +void create_write_rtscts() { + printf("[*] Creating RTS Frame\n"); + struct libwifi_rts rts = {0}; + unsigned char transmitter[6] = "\x00\x20\x91\xAA\xBB\xCC"; + unsigned char receiver[6] = "\xFF\xFF\xFF\xFF\xFF\xFF"; + libwifi_create_rts(&rts, transmitter, receiver, 32); + + printf("[*] Writing RTS Frame to pcap\n"); + struct pcap_pkthdr pkt_hdr = {0}; + struct timeval tv = {0}; + pkt_hdr.caplen = sizeof(struct libwifi_rts); + pkt_hdr.len = sizeof(struct libwifi_rts); + gettimeofday(&tv, NULL); + pkt_hdr.ts = tv; + pcap_dump((unsigned char *) filedumper, &pkt_hdr, (const unsigned char *) &rts); + + printf("[*] Creating CTS Frame\n"); + struct libwifi_cts cts = {0}; + libwifi_create_cts(&cts, receiver, 32); + + printf("[*] Writing CTS Frame to pcap\n"); + memset(&pkt_hdr, 0, sizeof(struct pcap_pkthdr)); + memset(&tv, 0, sizeof(struct timeval)); + pkt_hdr.caplen = sizeof(struct libwifi_cts); + pkt_hdr.len = sizeof(struct libwifi_cts); + gettimeofday(&tv, NULL); + pkt_hdr.ts = tv; + pcap_dump((unsigned char *) filedumper, &pkt_hdr, (const unsigned char *) &cts); +} + +void helpexit() { + fprintf(stderr, "[!] Usage: ./generate_beacon --file \n"); + exit(EXIT_FAILURE); +} + +int main(int argc, char **argv) { + pcap_t *handle = NULL; + char errbuf[PCAP_ERRBUF_SIZE] = {0}; + FILE *pcapfile = NULL; + + if (argc < 2) { + helpexit(); + } + if (strcmp(argv[1], "--file") == 0) { + pcapfile = fopen(argv[2], "w+"); + if ((handle = pcap_open_dead(DLT_IEEE802_11, BUFSIZ)) == NULL) { + fprintf(stderr, "[!] Error opening dead capture (%s)\n", errbuf); + exit(EXIT_FAILURE); + } + if ((filedumper = pcap_dump_fopen(handle, pcapfile)) == NULL) { + fprintf(stderr, "[!] Error opening file %s (%s)\n", argv[2], errbuf); + exit(EXIT_FAILURE); + } + } else { + helpexit(); + } + + printf("[+] Setup Complete\n"); + + create_write_rtscts(); + + pcap_dump_close(filedumper); + pcap_close(handle); + return 0; +} -- cgit 1.4.1