Esempio n. 1
0
        static private async Task <DHCPPacketView> GenerateLease(DHCPPacketView discovery, IPEndPoint localEndPoint, IPEndPoint remoteEndPoint)
        {
            DHCPPacketView result;

            switch (discovery.DHCPMessageType)
            {
            case DHCPMessageType.DHCPDISCOVER:
                result = new DHCPPacketView(DHCPMessageType.DHCPOFFER);
                break;

            case DHCPMessageType.DHCPREQUEST:
                result = new DHCPPacketView(DHCPMessageType.DHCPACK);
                break;

            default:
                return(null);
            }

            result.ClientHardwareAddress = discovery.ClientHardwareAddress;
            result.TransactionId         = discovery.TransactionId;
            result.TimeElapsed           = discovery.TimeElapsed;
            result.BroadcastFlag         = discovery.BroadcastFlag;
            result.NextServerIP          = localEndPoint.Address;
            result.RelayAgentIP          = discovery.RelayAgentIP;
            result.Hops = discovery.Hops;

            result.RenewalTimeValue   = TimeSpan.FromHours(12);
            result.RebindingTimeValue = TimeSpan.FromHours(21);
            result.IPAddressLeaseTime = TimeSpan.FromHours(24);

            result.DHCPServerIdentifier = localEndPoint.Address;

            result.YourIP     = IPAddress.Parse("172.20.0.99");
            result.SubnetMask = IPAddress.Parse("255.255.255.0");
            result.Routers    = new List <IPAddress> {
                IPAddress.Parse("172.20.0.1")
            };
            result.Hostname          = "bob";
            result.DomainName        = "minions.com";
            result.DomainNameServers = new List <IPAddress> {
                IPAddress.Parse("10.100.11.81")
            };

            return(result);
        }
Esempio n. 2
0
        public bool ReleaseLease(DHCPPacketView packet, IPEndPoint localEndPoint, IPEndPoint remoteEndPoint)
        {
            var pool = GetPoolByIP(packet.ClientIP);

            if (pool == null)
            {
                System.Diagnostics.Debug.WriteLine("Failed to find DHCP pool for lease release -> " + packet.ClientIP.ToString());
                return(false);
            }

            var addressPool = AddressPools.Where(x => x.Pool == pool).FirstOrDefault();

            if (addressPool == null)
            {
                System.Diagnostics.Debug.WriteLine("Failed to to find DHCP IP address pool for lease release -> " + packet.ClientIP.ToString());
                return(false);
            }

            addressPool.SetAvailable(packet.ClientIP);
            System.Diagnostics.Debug.WriteLine("Returned address " + packet.ClientIP.ToString() + " to the address pool");

            var count = Leases
                        .RemoveAll(x =>
                                   x.ClientId.Equals(packet.ClientId)
                                   );

            if (count == 0)
            {
                System.Diagnostics.Debug.WriteLine("DHCPPools did not have a lease to be released for client id " + packet.ClientId.ToString());
                return(false);
            }

            System.Diagnostics.Debug.WriteLine("DHCPPools released IP address " + packet.ClientIP.ToString() + " for client id " + packet.ClientId.ToString());

            return(true);
        }