Exemple #1
0
        /*
         * private NetworkInterface findNetworkInterface()
         * {
         *  NetworkInterface[] intfs = NetworkInterface.GetAllNetworkInterfaces();
         *  foreach (NetworkInterface intf in intfs)
         *  {
         *      //Util.log(string.Format("===== {0}:{1} =====", intf.Name, intf.NetworkInterfaceType));
         *
         *      //bypass some interfaces
         *      if (intf.NetworkInterfaceType == NetworkInterfaceType.Loopback)
         *      {
         *          Util.log(string.Format("bypass loopback interface: {0}({1})", intf.Name, intf.Id));
         *          continue;
         *      }
         *      else if (intf.Name.StartsWith("VMware Network Adapter"))
         *      {
         *          Util.log(string.Format("bypass VMWare virtual interface: {0}({1})", intf.Name, intf.Id));
         *          continue;
         *      }
         *      else if (intf.OperationalStatus.Equals(OperationalStatus.Down))
         *      {
         *          Util.log(string.Format("bypass link down interface: {0}({1})", intf.Name, intf.Id));
         *          continue;
         *      } else if (Util.hasLinkLocalIp(intf))
         *      {
         *          Util.log(string.Format("bypass linklocal interface: {0}({1})", intf.Name, intf.Id));
         *          continue;
         *      }
         *
         *      return intf;
         *  }
         *  return null;
         * }   */

        /// <summary>Start the DHCP server.</summary>
        public void start()
        {
            if (localAddress == null)
            {
                dhcpsvr = new DHCPServer();
                sendNotify(DhcpNotify.NotifyType.CONTROL, "RTDhcpServer binds to 0.0.0.0");
            }
            else
            {
                dhcpsvr = new DHCPServer(localAddress);
                sendNotify(DhcpNotify.NotifyType.CONTROL, String.Format("RTDhcpServer binds to {0}", localAddress.ToString()));
            }
            dhcpsvr.OnDiscover += discoverHandler;
            dhcpsvr.OnRequest  += requestHandler;
            dhcpsvr.OnReleased += releaseHandler;
            dhcpsvr.OnDecline  += declineHandler;
            dhcpsvr.OnInform   += informHandler;
            //dhcpsvr.SendDhcpAnswerNetworkInterface = intf;
            dhcpsvr.BroadcastAddress = IPAddress.Broadcast;

            dhcpsvr.Start();

            state = STATE_RUNNING;

            sendNotify(DhcpNotify.NotifyType.CONTROL, "RTDhcpServer is running.");
        }
        static void Main(string[] args)
        {
            var server = new DHCPServer();

            server.ServerName       = "SharpDHCPServer";
            server.OnDataReceived  += Request;
            server.BroadcastAddress = IPAddress.Parse("192.168.1.255");
            server.Start();
            Console.WriteLine("Running DHCP server. Press enter to stop it.");
            Console.ReadLine();
            server.Dispose();
        }
Exemple #3
0
        static void Main(string[] args)
        {
            var lst = NetworkInterface.GetAllNetworkInterfaces();

            var eth0If = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(x => x.Name == "USB_ETH");
            var server = new DHCPServer();

            server.ServerName       = "SharpDHCPServer";
            server.OnDataReceived  += Request;
            server.BroadcastAddress = IPAddress.Broadcast;
            server.SendDhcpAnswerNetworkInterface = eth0If;
            server.Start();
            Console.WriteLine("Running DHCP server. Press enter to stop it.");
            Console.ReadLine();
            server.Dispose();
        }
Exemple #4
0
        static void Main(string[] args)
        {
            var server = new DHCPServer();

            server.OnDHCPDiscover += new DHCPServer.DHCPProcessDelegate(async(discovery, localEndPoint, remoteEndPoint) =>
            {
                return(await GenerateLease(discovery, localEndPoint, remoteEndPoint));
            });

            server.OnDHCPRequest += new DHCPServer.DHCPProcessDelegate(async(discovery, localEndPoint, remoteEndPoint) =>
            {
                return(await GenerateLease(discovery, localEndPoint, remoteEndPoint));
            });

            Task.Factory.StartNew(() => { server.Start(); });
            Thread.Sleep(600000);
        }
Exemple #5
0
        //Based on ClusterM's Sharp-DHCP-Server
        //Credit and thanks goes to ClusterM, and jogibear9988

        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var server = new DHCPServer(new System.Net.IPAddress(new byte[] { 192, 168, 137, 1 }));

            server.ServerName       = "sharpDHCPWifiToEthernet";
            server.BroadcastAddress = IPAddress.Broadcast.ToString();

            BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

            taskInstance.Canceled += (o, e) => { server.Dispose(); deferral.Complete(); };

            server.OnDataReceived += (sender, dhcpRequest) =>
            {
                try
                {
                    var type = dhcpRequest.GetMsgType();
                    var ip   = new System.Net.IPAddress(new byte[] { 192, 168, 137, 11 });

                    var replyOptions = new DHCPReplyOptions();
                    replyOptions.SubnetMask        = IPAddress.Parse("255.255.255.0");
                    replyOptions.DomainName        = server.ServerName;
                    replyOptions.ServerIdentifier  = IPAddress.Parse("192.168.137.1");
                    replyOptions.RouterIP          = IPAddress.Parse("192.168.137.1");
                    replyOptions.DomainNameServers = new IPAddress[]
                    { IPAddress.Parse("8.8.8.8"), IPAddress.Parse("8.8.4.4") };


                    if (type == DHCPMsgType.DHCPDISCOVER)
                    {
                        dhcpRequest.SendDHCPReply(DHCPMsgType.DHCPOFFER, ip, replyOptions);
                    }
                    if (type == DHCPMsgType.DHCPREQUEST)
                    {
                        dhcpRequest.SendDHCPReply(DHCPMsgType.DHCPACK, ip, replyOptions);
                    }
                }
                catch
                {
                }
            };

            server.Start();
        }
        private void Resurrect(object state)
        {
            lock (m_Lock)
            {
                if (!m_Disposed)
                {
                    try
                    {
                        m_Server                     = new DHCPServer(Program.GetClientInfoPath(m_Config.Name, m_Config.Address));
                        m_Server.EndPoint            = new IPEndPoint(IPAddress.Parse(m_Config.Address), 67);
                        m_Server.SubnetMask          = IPAddress.Parse(m_Config.NetMask);
                        m_Server.PoolStart           = IPAddress.Parse(m_Config.PoolStart);
                        m_Server.PoolEnd             = IPAddress.Parse(m_Config.PoolEnd);
                        m_Server.LeaseTime           = (m_Config.LeaseTime > 0) ? TimeSpan.FromSeconds(m_Config.LeaseTime) : Utils.InfiniteTimeSpan;
                        m_Server.OfferExpirationTime = TimeSpan.FromSeconds(Math.Max(1, m_Config.OfferTime));
                        m_Server.MinimumPacketSize   = m_Config.MinimumPacketSize;

                        List <OptionItem> options = new List <OptionItem>();
                        foreach (OptionConfiguration optionConfiguration in m_Config.Options)
                        {
                            options.Add(optionConfiguration.ConstructOptionItem());
                        }
                        m_Server.Options = options;

                        List <ReservationItem> reservations = new List <ReservationItem>();
                        foreach (ReservationConfiguration reservationConfiguration in m_Config.Reservations)
                        {
                            reservations.Add(reservationConfiguration.ConstructReservationItem());
                        }
                        m_Server.Reservations = reservations;

                        m_Server.OnStatusChange += server_OnStatusChange;
                        m_Server.OnTrace        += server_OnTrace;
                        m_Server.Start();
                    }
                    catch (Exception)
                    {
                        CleanupAndRetry();
                    }
                }
            }
        }
Exemple #7
0
        public static async void StartServer(string interfaceIp, string targetIp)
        {
            Console.WriteLine($"Looking for interface for IP {interfaceIp}");
            var intf = NetworkInterface.GetAllNetworkInterfaces()
                       .Where(
                x => x.GetIPProperties().UnicastAddresses
                .Any(y => y.Address.Equals(IPAddress.Parse(interfaceIp)))
                ).FirstOrDefault();

            if (intf == null)
            {
                Console.WriteLine($"Interface for IP {interfaceIp} not found!");
                return;
            }
            Console.WriteLine($"Starting DHCP server on interface {intf.Name}");
            var server = new DHCPServer();

            if (targetIp == null)
            {
                var rnd      = new Random();
                var ip_bytes = interfaceIp.Split(".");
                var lastByte = int.Parse(ip_bytes[3]);
                int newByte  = rnd.Next(2, 254);
                while (newByte == lastByte)
                {
                    newByte = rnd.Next(2, 254);
                }
                ip_bytes[3] = newByte.ToString();
                targetIp    = string.Join(".", ip_bytes);
            }
            Console.WriteLine($"Client will receive IP {targetIp}");
            server.OnDataReceived += delegate(DHCPRequest dhcpRequest)
            {
                Request(dhcpRequest, IPAddress.Parse(targetIp), interfaceIp);
            };
            server.BroadcastAddress = IPAddress.Broadcast;
            server.SendDhcpAnswerNetworkInterface = intf;
            server.Start();
            Console.WriteLine("Running DHCP server... Press CTRL-C to exit");
            await LoadingIndicator();
        }
        private void Resurrect(object state)
        {
            lock (m_Lock)
            {
                if (!m_Disposed)
                {
                    try
                    {
                        m_Server = DHCPServer.FromConfig(m_Config);

                        m_Server.OnStatusChange += server_OnStatusChange;
                        m_Server.OnTrace        += server_OnTrace;
                        m_Server.Start();
                    }
                    catch (Exception)
                    {
                        CleanupAndRetry();
                    }
                }
            }
        }