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;
 }
示例#2
0
        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();
            }
        }