diff options
author | June McEnroe <june@causal.agency> | 2017-08-06 20:03:36 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2017-08-06 20:03:36 -0400 |
commit | 8674a16312ab5e7d143953e9b9f70a3b8928522d (patch) | |
tree | 11f03252a1eda963f78a5523169145f245839994 /home | |
parent | Use $() in install.sh (diff) | |
download | src-8674a16312ab5e7d143953e9b9f70a3b8928522d.tar.gz src-8674a16312ab5e7d143953e9b9f70a3b8928522d.zip |
Add wake
That payload can appear anywhere within an ethernet frame. Wake-on-LAN is funny.
Diffstat (limited to 'home')
-rwxr-xr-x | home/.bin/wake.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/home/.bin/wake.c b/home/.bin/wake.c new file mode 100755 index 00000000..2f314975 --- /dev/null +++ b/home/.bin/wake.c @@ -0,0 +1,41 @@ +#if 0 +exec cc -Wall -Wextra -Wpedantic $@ -o $(dirname $0)/wake $0 +#endif + +#include <err.h> +#include <netinet/in.h> +#include <stdint.h> +#include <stdlib.h> +#include <sys/socket.h> +#include <sysexits.h> + +#define MAC 0x04, 0x7D, 0x7B, 0xD5, 0x6A, 0x53 + +const uint8_t payload[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + MAC, MAC, MAC, MAC, MAC, MAC, MAC, MAC, + MAC, MAC, MAC, MAC, MAC, MAC, MAC, MAC, +}; + +int main() { + int sock = socket(PF_INET, SOCK_DGRAM, 0); + if (sock < 0) err(EX_OSERR, "socket"); + + int on = 1; + int error = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)); + if (error) err(EX_OSERR, "setsockopt"); + + struct sockaddr_in addr = { + .sin_family = AF_INET, + .sin_port = 9, + .sin_addr.s_addr = INADDR_BROADCAST, + }; + + ssize_t len = sendto( + sock, payload, sizeof(payload), 0, + (struct sockaddr *)&addr, sizeof(addr) + ); + if (len < 0) err(EX_IOERR, "sendto"); + + return EX_OK; +} |