Esempio n. 1
0
        private const int PORT_TO_SEND_TO_RELAY  = 0x43; // EDITED:: valore 67 (porta del server)

        /// <summary>
        /// Raw DHCP packet
        /// </summary>

        internal DhcpRequest(byte[] data, DatagramSocket socket, Dhcp server)
        {
            dhcpServer = server;
            BinaryReader rdr;
            MemoryStream stm = new MemoryStream(data, 0, data.Length);

            rdr = new 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;
        }
Esempio n. 2
0
        private const ushort DELAY = 0x1388;    // 5 s

        public void Run(IPAddress iPAddress, string dns, string subnetMask, string serverIdentifier, string routerIP)
        {
            UpdateStatus($"IP address:\t{iPAddress}");
            UpdateStatus($"DNS:\t{dns}");
            UpdateStatus($"SUBMASK:\t{subnetMask}");
            UpdateStatus($"SERVER IDENTIFIER:\t{serverIdentifier}");
            UpdateStatus($"ROUTER IP:\t{routerIP}");

            var server = new Dhcp(iPAddress);

            UpdateStatus("SETTATO L'IP DEL SERVER");
            server.ServerName = dns;
            UpdateStatus("SETTATO IL DNS DEL SERVER");
            server.BroadcastAddress = IPAddress.Broadcast.ToString();
            UpdateStatus("SETTATO IN BROADCAST IL SERVER");
            server.OnDataReceived += (sender, dhcpRequest) =>
            {
                UpdateStatus("GENERATO NUOVO EVENTO NEL SERVER");
                try
                {
                    var type = dhcpRequest.GetMsgType();
                    UpdateStatus($"TIPO DI RICHIESTA RICEVUTA DAL SERVER:\t{type}");
                    var ip = iPAddress;

                    var replyOptions = new DhcpReplyOptions();
                    UpdateStatus("SETTAGGIO DELLA RISPOSTA DAL SERVER IN CORSO...");
                    replyOptions.SubnetMask = IPAddress.Parse(subnetMask);
                    UpdateStatus($"SUBNETMASK:\t{replyOptions.SubnetMask}");
                    replyOptions.DomainName = server.ServerName;
                    UpdateStatus($"DOMAIN NAME:\t{replyOptions.DomainName}");
                    replyOptions.ServerIdentifier = IPAddress.Parse(serverIdentifier);
                    UpdateStatus($"SERVER IDENTIFIER:\t{replyOptions.ServerIdentifier}");
                    replyOptions.RouterIP = IPAddress.Parse(routerIP);
                    UpdateStatus($"IP ROUTER:\t{replyOptions.RouterIP}");
                    replyOptions.DomainNameServers = new IPAddress[]
                    { IPAddress.Parse("8.8.8.8"), IPAddress.Parse("8.8.4.4") };
                    UpdateStatus("CONFIGURAZIONE DEL DOMINIO DEL SERVER");

                    if (type == DhcpMsgType.DHCPDISCOVER)
                    {
                        UpdateStatus($"RISPOSTA\t->\tTIPO MESSAGGIO:{DhcpMsgType.DHCPOFFER}");
                        UpdateStatus($"RISPOSTA\t->\tIP:{ip}");
                        dhcpRequest.SendDHCPReply(DhcpMsgType.DHCPOFFER, ip, replyOptions);
                    }
                    if (type == DhcpMsgType.DHCPREQUEST)
                    {
                        UpdateStatus($"RISPOSTA\t->\tTIPO MESSAGGIO:{DhcpMsgType.DHCPACK}");
                        UpdateStatus($"RISPOSTA\t->\tIP:{ip}");
                        dhcpRequest.SendDHCPReply(DhcpMsgType.DHCPACK, ip, replyOptions);
                    }
                }
                catch (Exception e)
                {
                    UpdateStatus($"EXCEPTION IN SERVER:\t{e.Message}");
                }
            };
            UpdateStatus("ESECUZIONE DEL SERVER DHCP IN CORSO...");
            server.Start();
        }