Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 44 additions & 5 deletions MagicPacket/Program.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,49 @@
using System.Net.Sockets;
using System.Diagnostics;
using System.Net.Sockets;
using System.Globalization;

SendMagicPacket("MAC:ADDRESS:GOES:HERE", "IP.ADDRESS.GOES.HERE", 7);

void SendMagicPacket(string macAddress, string ipAddress, int port)
string domain = args.Length > 0 ? args[0] : Environment.GetEnvironmentVariable("MAGICPACKET_DNS") ?? "wol.example.com";

(string macAddress, string ipAddress) = ResolveParameters(domain);

SendMagicPacket(macAddress, ipAddress, 7);

static (string mac, string ip) ResolveParameters(string domain)
{
var psi = new ProcessStartInfo("nslookup", $"-type=TXT {domain}")
{
RedirectStandardOutput = true,
UseShellExecute = false
};
using var process = Process.Start(psi)!;
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();

string mac = string.Empty;
string ip = string.Empty;

foreach (var line in output.Split('\n'))
{
var trimmed = line.Trim();
if (trimmed.Contains("text ="))
{
var text = trimmed.Substring(trimmed.IndexOf("text =") + 6).Trim().Trim('"');
foreach (var token in text.Split(new[] {' ', ','}, StringSplitOptions.RemoveEmptyEntries))
{
if (token.StartsWith("mac=", StringComparison.OrdinalIgnoreCase))
mac = token.Substring(4);
else if (token.StartsWith("ip=", StringComparison.OrdinalIgnoreCase))
ip = token.Substring(3);
}
}
}

return (mac, ip);
}

static void SendMagicPacket(string macAddress, string ipAddress, int port)
{
var macBytes = macAddress.Split(':').Select(x => byte.Parse(x, System.Globalization.NumberStyles.HexNumber)).ToArray();
var macBytes = macAddress.Split(':').Select(x => byte.Parse(x, NumberStyles.HexNumber)).ToArray();

var packet = new byte[6 + 16 * macBytes.Length];

Expand Down