internal DHCPRequest(byte[] data, Socket socket, IPEndPoint source, DHCPServer server) { dhcpServer = server; System.IO.BinaryReader rdr; System.IO.MemoryStream stm = new System.IO.MemoryStream(data, 0, data.Length); rdr = new System.IO.BinaryReader(stm); // Reading data requestData.op = rdr.ReadByte(); requestData.htype = rdr.ReadByte(); requestData.hlen = rdr.ReadByte(); requestData.hops = rdr.ReadByte(); requestData.xid = rdr.ReadBytes(4); requestData.secs = rdr.ReadBytes(2); requestData.flags = rdr.ReadBytes(2); requestData.ciaddr = rdr.ReadBytes(4); requestData.yiaddr = rdr.ReadBytes(4); requestData.siaddr = rdr.ReadBytes(4); requestData.giaddr = rdr.ReadBytes(4); requestData.chaddr = rdr.ReadBytes(16); requestData.sname = rdr.ReadBytes(64); requestData.file = rdr.ReadBytes(128); requestData.mcookie = rdr.ReadBytes(4); requestData.options = rdr.ReadBytes(data.Length - OPTION_OFFSET); requestSocket = socket; remote = source; }
private static void Main(string[] args) { if (args.Length > 0 && (ContainsSwitch(args, "help") || ContainsSwitch(args, "?"))) { Console.WriteLine(); Console.WriteLine("\t--version\t Displays the current version"); Console.WriteLine("\t--generate\t Generates the apple-vendor-specific-information string for Apple NetBoot"); Console.WriteLine("\t--install\t Installs service on Windows"); Console.WriteLine("\t--uninstall\t Uninstalls service on Windows"); Console.WriteLine("\t--console\t Runs application in console mode without installing service"); Console.WriteLine("\t--debug\t\t Runs the application in console mode with debug output"); Console.WriteLine("\t--daemon\t Run the application for unix in daemon mode for use with Upstart, Systemd, etc."); Environment.Exit(0); } if (args.Length > 0 && ContainsSwitch(args, "version")) { Console.WriteLine("2.0.2"); Environment.Exit(0); } if (args.Length > 0 && ContainsSwitch(args, "generate")) { new AppleVendorInfo().Generate(); Environment.Exit(0); } if (args.Length > 0 && ContainsSwitch(args, "install")) { Install(); Environment.Exit(0); } if (args.Length > 0 && ContainsSwitch(args, "uninstall")) { Uninstall(); Environment.Exit(0); } new Settings().SetAll(); var server = new DHCPServer.DHCPServer(IPAddress.Parse(Settings.Nic), 67); var proxy = new DHCPServer.DHCPServer(IPAddress.Parse(Settings.Nic), 4011); server.OnDataReceived += new DHCPDataReceived().Process; proxy.OnDataReceived += new ProxyDataReceived().Process; DhcpHost host = new DhcpHost(server, proxy); //Run as Windows service if (args.Length == 0) { var servicesToRun = new ServiceBase[] { host }; ServiceBase.Run(servicesToRun); return; } //Only used for unix because the Mono service version wasn't working correctly. if (ContainsSwitch(args, "daemon")) { host.ManualStart(args); UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGTERM) }; for (var exit = false; !exit;) { var id = UnixSignal.WaitAny(signals); if (id >= 0 && id < signals.Length) { if (signals[id].IsSet) { exit = true; } } } } else if (ContainsSwitch(args, "console") || ContainsSwitch(args, "debug")) { if (ContainsSwitch(args, "debug")) { Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); } host.ManualStart(args); Console.WriteLine(); Console.WriteLine("DHCP Service Running"); Console.WriteLine("Press [Enter] to Exit."); Console.Read(); host.ManualStop(); } else { Console.WriteLine("Invalid Argument"); Console.WriteLine("Press [Enter] to Exit."); Console.Read(); } }