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; } } }
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); }