commit 84bf8c04cdeec1ddcf34640984ab64a4b4713f3a Author: Dustin C. Hatch Date: Tue Aug 14 22:09:15 2018 -0500 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53eaa21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..69d11b0 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "wakeonlan" +version = "0.1.0" + diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..63168b6 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "wakeonlan" +version = "0.1.0" +authors = ["Dustin C. Hatch "] + +[dependencies] diff --git a/src/magic.rs b/src/magic.rs new file mode 100644 index 0000000..13f2fb2 --- /dev/null +++ b/src/magic.rs @@ -0,0 +1,59 @@ +use std::io; +use std::net; + + +pub struct MagicPacket { + addr: [u8; 6], +} + + +impl MagicPacket { + pub fn new(addr: [u8; 6]) -> Self { + MagicPacket { addr } + } + + pub fn send(&self) -> io::Result { + let socket = net::UdpSocket::bind("0.0.0.0:0")?; + socket.set_broadcast(true)?; + socket.connect("255.255.255.255:9")?; + socket.send(&self.to_buf()) + } + + pub fn to_buf(&self) -> [u8; 102] { + [ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + self.addr[0], self.addr[1], self.addr[2], + self.addr[3], self.addr[4], self.addr[5], + ] + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..2ef3a5d --- /dev/null +++ b/src/main.rs @@ -0,0 +1,6 @@ +mod magic; + +fn main() { + let packet = magic::MagicPacket::new([0x0c, 0x9d, 0x92, 0x0e, 0x3a, 0x41]); + packet.send().unwrap(); +}