コード例 #1
0
        private void FillOptions(DhcpFormat request, DhcpFormat response)
        {
            SortedList requestOptions = request.GetOptions();

            response.AddOption(DhcpServerID.Create(ServerAddress));
            response.AddOption(DhcpRenewalTime.Create(RenewalTime));
            response.AddOption(DhcpRebindingTime.Create(RebindingTime));

            foreach (IDhcpOption option in requestOptions.Values)
            {
                byte optionCode = option.OptionCode;
                Console.WriteLine("({0}) {1}",
                                  optionCode,
                                  DhcpOptionParser.GetOptionName(optionCode));
            }

            DhcpMultiByteOption parameters =
                requestOptions[DhcpParameterRequest.OptionCode]
                as DhcpMultiByteOption;

            if (parameters == null)
            {
                return;
            }

            foreach (byte parameter in parameters.Values)
            {
                switch (parameter)
                {
                case DhcpSubnetMask.OptionCode:
                    response.AddOption(DhcpSubnetMask.Create(NetMask));
                    break;

                case DhcpDomainName.OptionCode:
                    response.AddOption(
                        DhcpDomainName.Create(DomainName.ToCharArray())
                        );
                    break;

                case DhcpRouter.OptionCode:
                    response.AddOption(DhcpRouter.Create(Routers));
                    break;

                case DhcpDomainNameServer.OptionCode:
                    response.AddOption(
                        DhcpDomainNameServer.Create(DnsServers)
                        );
                    break;
                }
            }
        }
コード例 #2
0
        public DhcpMessage ToMessage(DhcpPacket packet)
        {
            DhcpOptionParser parser = new DhcpOptionParser();
            DhcpMessage      result = new DhcpMessage
            {
                OperationCode         = (DhcpOperation)packet.Op,
                HardwareType          = (HardwareType)packet.HType,
                HardwareAddressLength = packet.HLen,
                Hops                  = packet.Hops,
                TransactionId         = BitConverter.ToInt32(packet.XID.Reverse().ToArray(), 0),
                SecondsElapsed        = BitConverter.ToUInt16(packet.Secs, 0),
                Flags                 = BitConverter.ToUInt16(packet.Flags, 0),
                ClientIPAddress       = new IPAddress(packet.CIAddr),
                YourIPAddress         = new IPAddress(packet.YIAddr),
                ServerIPAddress       = new IPAddress(packet.SIAddr),
                GatewayIPAddress      = new IPAddress(packet.GIAddr),
                ClientHardwareAddress = new PhysicalAddress(packet.CHAddr.Take(packet.HLen).ToArray()),
                File                  = packet.File,
                Cookie                = packet.Cookie,
                Options               = parser.GetOptions(packet.Options)
            };

            return(result);
        }