public void GetHostIdentifierEx()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40));
            var m  = new NetMask(Ba(255, 255, 255, 0));

            IPAddress id = ip.GetHostIdentifier(m);
        }
Ejemplo n.º 2
0
        public void Constructor()
        {
            var ip       = IPAddress.Parse("255.255.248.0");
            var expected = new NetMask(255, 255, 248, 0);
            var actual   = new NetMask(ip);

            Assert.AreEqual(expected, actual);

            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(21);

            Assert.IsTrue(m1 == m2);

            var m3 = new NetMask(Ba(255, 255, 248, 0));

            Assert.IsTrue(m1 == m3);

            var m4 = new NetMask((byte[])null);

            Assert.IsTrue(m4 == NetMask.Empty);

            var m5 = new NetMask(Ba());

            Assert.IsTrue(m5 == NetMask.Empty);

            var m6 = new NetMask((IPAddress)null);

            Assert.IsTrue(m6 == NetMask.Empty);
        }
Ejemplo n.º 3
0
 public void ConstructorEx()
 {
     Assert.Throws <ArgumentException>(() =>
     {
         var m3 = new NetMask(Ba(255, 255, 248, 0, 0));
     });
 }
Ejemplo n.º 4
0
        public void Or()
        {
            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(255, 255, 0, 0);

            var mOr = m1 | m2;

            Assert.AreEqual(m1, mOr);

            mOr = (NetMask)null | (NetMask)null; // wat
            Assert.AreEqual(NetMask.Empty, mOr);

            mOr = NetMask.BitwiseOr(m1, m2);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(m2, m1);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(m2, null);
            Assert.AreEqual(m2, mOr);

            mOr = NetMask.BitwiseOr(null, m1);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(null, null);
            Assert.AreEqual(NetMask.Empty, mOr);
        }
Ejemplo n.º 5
0
        public void Or()
        {
            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(255, 255, 0, 0);

            var mOr = m1 | m2;

            Assert.AreEqual(m1, mOr);

            // NetMask is now a struct and cannot be null.
            // mOr = (NetMask)null | (NetMask)null; // wat
            // Assert.AreEqual(NetMask.Empty, mOr);

            mOr = NetMask.BitwiseOr(m1, m2);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(m2, m1);
            Assert.AreEqual(m1, mOr);

            // NetMask is now a struct and cannot be null.
            // mOr = NetMask.BitwiseOr(m2, null);
            //Assert.AreEqual(m2, mOr);

            // NetMask is now a struct and cannot be null.
            // mOr = NetMask.BitwiseOr(null, m1);
            //Assert.AreEqual(m1, mOr);

            // NetMask is now a struct and cannot be null.
            // mOr = NetMask.BitwiseOr(null, null);
            //Assert.AreEqual(NetMask.Empty, mOr);
        }
Ejemplo n.º 6
0
        public void AndMask()
        {
            var m1 = new NetMask(255, 255, 255, 0);
            var m2 = new NetMask(255, 255, 0, 0);

            var mAnd = m1 & m2;

            Assert.AreEqual(m2, mAnd);

            mAnd = m2 & m1;
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, m2);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, m1);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, m2);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, m1);
            Assert.AreEqual(m1, mAnd);


            // NetMask is now a struct and cannot be null.
            // mAnd = NetMask.BitwiseAnd((NetMask)null, m1);
            // Assert.AreEqual(NetMask.Empty, mAnd);

            // NetMask is now a struct and cannot be null.
            // mAnd = NetMask.BitwiseAnd(m2, (NetMask)null);
            // Assert.AreEqual(NetMask.Empty, mAnd);
        }
Ejemplo n.º 7
0
        public void AndMask()
        {
            var m1 = new NetMask(255, 255, 255, 0);
            var m2 = new NetMask(255, 255, 0, 0);

            var mAnd = m1 & m2;

            Assert.AreEqual(m2, mAnd);

            mAnd = m2 & m1;
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, m2);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, m1);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, m2);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, m1);
            Assert.AreEqual(m1, mAnd);


            mAnd = NetMask.BitwiseAnd((NetMask)null, m1);
            Assert.AreEqual(NetMask.Empty, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, (NetMask)null);
            Assert.AreEqual(NetMask.Empty, mAnd);
        }
        public void GetNetworkPrefixEx()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40));
            var m = new NetMask(Ba(255, 255, 255, 0));

            IPAddress prefix = ip.GetNetworkPrefix(m);
        }
        public void GetHostIdentifierEx()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40));
            var m = new NetMask(Ba(255, 255, 255, 0));

            IPAddress id = ip.GetHostIdentifier(m);
        }
Ejemplo n.º 10
0
        public void AndIp()
        {
            var m1  = new NetMask(255, 255, 255, 0);
            var ip1 = new IPAddress(Ba(255, 255, 0, 0));

            var mAnd = m1 & ip1;

            Assert.AreEqual(ip1, mAnd);

            mAnd = ip1 & m1;
            Assert.AreEqual(ip1, mAnd);

            mAnd = NetMask.BitwiseAnd(ip1, m1);
            Assert.AreEqual(ip1, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, ip1);
            Assert.AreEqual(ip1, mAnd);


            mAnd = NetMask.BitwiseAnd(m1, (IPAddress)null);
            Assert.AreEqual(IPAddress.Any, mAnd);

            mAnd = NetMask.BitwiseAnd((NetMask)null, ip1);
            Assert.AreEqual(IPAddress.Any, mAnd);
        }
Ejemplo n.º 11
0
        public void AndMask()
        {
            var m1 = new NetMask(255, 255, 255, 0);
            var m2 = new NetMask(255, 255, 0, 0);

            var mAnd = m1 & m2;
            Assert.AreEqual(m2, mAnd);

            mAnd = m2 & m1;
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, m2);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, m1);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, m2);
            Assert.AreEqual(m2, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, m1);
            Assert.AreEqual(m1, mAnd);

            mAnd = NetMask.BitwiseAnd((NetMask)null, m1);
            Assert.AreEqual(NetMask.Empty, mAnd);

            mAnd = NetMask.BitwiseAnd(m2, (NetMask)null);
            Assert.AreEqual(NetMask.Empty, mAnd);
        }
Ejemplo n.º 12
0
        public void GetNetworkPrefixEx()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40));
            var m  = new NetMask(Ba(255, 255, 255, 0));

            IPAddress prefix = ip.GetNetworkPrefix(m);
        }
Ejemplo n.º 13
0
        public void GetMaskBytes()
        {
            var actual   = Ba(255, 255, 248, 0);
            var m        = new NetMask(actual);
            var expected = m.GetMaskBytes();

            Assert.IsTrue(actual.SequenceEqual(expected));
        }
Ejemplo n.º 14
0
        public void ToStringTest()
        {
            //var m1 = new NetMask(255, 255, 248, 0);
            var m1       = new NetMask(21);
            var expected = "255.255.248.0 (11111111.11111111.11111000.00000000)";
            var str      = m1.ToString();

            Assert.AreEqual(expected, str);
        }
Ejemplo n.º 15
0
        private void MessageArrived(string subject, ref bool isHandled)
        {
            var cmdMatch = Regex.Match(subject, @"^Command WOL (.+?) (.+?)$");

            if (!cmdMatch.Success)
            {
                return;
            }


            var ipText  = cmdMatch.Groups[1].Value;
            var macText = cmdMatch.Groups[2].Value;

            Console.WriteLine($"Handling WOL to {ipText} {macText}");

            try
            {
                var             ip = IPAddress.Parse(ipText);
                PhysicalAddress macAddress;
                if (string.IsNullOrEmpty(macText))
                {
                    if (Environment.OSVersion.Platform != PlatformID.Win32NT)
                    {
                        throw new InvalidOperationException("MAC adress is required on Non-Windows OS");
                    }
                    ArpRequestResult res = ArpRequest.Send(ip);
                    if (res.Exception != null)
                    {
                        ExceptionDispatchInfo.Capture(res.Exception).Throw();
#pragma warning disable CS8597 // Never happens due to ExceptionDispatchInfo throwing.
                        throw null;
#pragma warning restore CS8597
                    }
                    else
                    {
                        macAddress = res.Address;
                    }
                }
                else
                {
                    macAddress = PhysicalAddress.Parse(macText);
                }

                macAddress.SendWol(ip);

                var mask             = new NetMask(255, 255, 255, 0);
                var broadcastAddress = ip.GetBroadcastAddress(mask);

                IPAddress.Broadcast.SendWol(macAddress);
                isHandled = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Problem with WOL: " + ex.Message);
                isHandled = false;
            }
        }
Ejemplo n.º 16
0
        public override byte[] ToByteArray()
        {
            List <byte> buffer = new List <byte>();

            buffer.AddRange(Utils.GetBytesFromString(Name, 32));
            buffer.AddRange(Ip.GetAddressBytes());
            buffer.AddRange(NetMask.GetAddressBytes());
            buffer.AddRange(DefaultGateway.GetAddressBytes());
            return(buffer.ToArray());
        }
 public NetworkInterface(IPAddress ipAddress,
                         NetMask netMask,
                         IPAddress broadcast,
                         IPAddress defaultRoute)
 {
     this.ipAddress    = ipAddress;
     this.netMask      = netMask;
     this.broadcast    = broadcast;
     this.defaultRoute = defaultRoute;
 }
Ejemplo n.º 18
0
        public void GetNetworkPrefixEx()
        {
            Assert.Throws <NotSupportedException>(() =>
            {
                var ip = new IPAddress(Ba(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40));
                var m  = new NetMask(Ba(255, 255, 255, 0));

                IPAddress prefix = ip.GetNetworkPrefix(m);
            });
        }
Ejemplo n.º 19
0
        public void GetHostIdentifierEx()
        {
            Assert.Throws <NotSupportedException>(() =>
            {
                var ip = new IPAddress(Ba(10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40));
                var m  = new NetMask(Ba(255, 255, 255, 0));

                IPAddress id = ip.GetHostIdentifier(m);
            });
        }
Ejemplo n.º 20
0
        public void EqualityOperator()
        {
            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(255, 255, 248, 0);
            var m3 = new NetMask(255, 255, 0, 0);

            Assert.AreEqual(m1, m2);
            Assert.IsTrue(m1 == m2);
            Assert.IsFalse(m1 == m3);
            Assert.IsTrue(m1 != m3);
        }
        public void GetHostIdentifier()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40));
            var m = new NetMask(Ba(255, 255, 255, 0));

            IPAddress expectedId = new IPAddress(Ba(0, 0, 0, 40));
            IPAddress id = ip.GetHostIdentifier(m);

            Assert.AreEqual(expectedId, id);

            // TODO: Add more tests!
        }
        public void GetNetworkPrefix()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40));
            var m = new NetMask(Ba(255, 255, 255, 0));

            IPAddress expectedPrefix = new IPAddress(Ba(10, 20, 30, 0));
            IPAddress prefix = ip.GetNetworkPrefix(m);

            Assert.AreEqual(expectedPrefix, prefix);

            // TODO: Add more tests!
        }
Ejemplo n.º 23
0
        public void GetNetworkPrefix()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40));
            var m  = new NetMask(Ba(255, 255, 255, 0));

            IPAddress expectedPrefix = new IPAddress(Ba(10, 20, 30, 0));
            IPAddress prefix         = ip.GetNetworkPrefix(m);

            Assert.AreEqual(expectedPrefix, prefix);

            // TODO: Add more tests!
        }
Ejemplo n.º 24
0
        public void GetHostIdentifier()
        {
            var ip = new IPAddress(Ba(10, 20, 30, 40));
            var m  = new NetMask(Ba(255, 255, 255, 0));

            IPAddress expectedId = new IPAddress(Ba(0, 0, 0, 40));
            IPAddress id         = ip.GetHostIdentifier(m);

            Assert.AreEqual(expectedId, id);

            // TODO: Add more tests!
        }
Ejemplo n.º 25
0
        /// <summary>Gets the network prefix of an <see cref="T:System.Net.IPAddress"/>.</summary>
        /// <param name="address">The address</param>
        /// <param name="mask">The net mask of the network</param>
        /// <returns>The network prefix of an <see cref="T:System.Net.IPAddress"/></returns>
        public static IPAddress GetNetworkPrefix(this IPAddress address, NetMask mask)
        {
            if (address == null)
                throw new ArgumentNullException(nameof(address));
            if (mask == null)
                throw new ArgumentNullException(nameof(mask));

            if (address.AddressFamily != Sockets.AddressFamily.InterNetwork)
                throw new NotSupportedException(OnlyIPv4Supported);

            return mask & address;
        }
Ejemplo n.º 26
0
        public void Abbreviate()
        {
            var expected = new NetMask(0);
            var actual = NetMask.Abbreviate(NetMask.Empty, 1);
            Assert.AreEqual(expected, actual);

            expected = new NetMask(3);
            actual = NetMask.Abbreviate(new NetMask(28), 25);
            Assert.AreEqual(expected, actual);

            expected = new NetMask(8);
            actual = NetMask.Abbreviate(new NetMask(9), 1);
            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 27
0
        public void Expand()
        {
            var expected = new NetMask(1);
            var actual   = NetMask.Extend(NetMask.Empty, 1);

            Assert.AreEqual(expected, actual);

            expected = new NetMask(2);
            actual   = NetMask.Extend(NetMask.Empty, 2);
            Assert.AreEqual(expected, actual);

            expected = new NetMask(2);
            actual   = NetMask.Extend(new NetMask(1), 1);
            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 28
0
        public void Abbreviate()
        {
            var expected = new NetMask(0);
            var actual   = NetMask.Abbreviate(NetMask.Empty, 1);

            Assert.AreEqual(expected, actual);

            expected = new NetMask(3);
            actual   = NetMask.Abbreviate(new NetMask(28), 25);
            Assert.AreEqual(expected, actual);

            expected = new NetMask(8);
            actual   = NetMask.Abbreviate(new NetMask(9), 1);
            Assert.AreEqual(expected, actual);
        }
        private void TestSiblings(List<IPAddress> expectedAddresses, IPAddress currentIp, NetMask mask, SiblingOptions options = SiblingOptions.IncludeAll)
        {
            var enumerable = currentIp.GetSiblings(mask, options);

            var siblingCount = mask.GetSiblingCount(options);
            Assert.AreEqual(expectedAddresses.Count, siblingCount);

            int i = 0;
            foreach (var t in enumerable)
            {
                var expected = expectedAddresses[i++];
                Assert.AreEqual(expected, t);
            }
            Assert.AreEqual(expectedAddresses.Count, i);
        }
Ejemplo n.º 30
0
        public void EqualsImplementation()
        {
            int a  = 2;
            var ip = new IPAddress(0);
            var m  = new NetMask(255, 255, 255, 0);
            var m1 = new NetMask(255, 255, 255, 0);

            Assert.IsFalse(m.Equals(a));
            Assert.IsFalse(m.Equals(ip));
            Assert.IsFalse(m.Equals(null));
            Assert.IsFalse(m.Equals((object)null));

            Assert.IsTrue(m.Equals(m));
            Assert.IsTrue(m.Equals(m1));
            Assert.IsTrue(m1.Equals(m));
        }
Ejemplo n.º 31
0
        public void MaskValidity()
        {
            var b1    = Ba(255, 255, 255, 255);
            var valid = NetMask.GetIsValidNetMask(b1);

            Assert.AreEqual(true, valid);

            b1    = Ba(255, 255, 255, 0);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(true, valid);

            b1    = Ba(255, 255, 0, 0);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(true, valid);

            b1    = Ba(255, 0, 0, 0);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(true, valid);

            b1    = Ba(0, 0, 0, 0);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(true, valid);

            b1    = Ba(0, 255, 255, 255);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(false, valid);

            b1    = Ba(0, 0, 255, 255);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(false, valid);

            b1    = Ba(0, 0, 0, 255);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(false, valid);

            b1    = Ba(255, 0, 255, 255);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(false, valid);

            b1    = Ba(255, 0, 0, 255);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(false, valid);

            b1    = Ba(255, 255, 0, 255);
            valid = NetMask.GetIsValidNetMask(b1);
            Assert.AreEqual(false, valid);
        }
Ejemplo n.º 32
0
        public void GetSiblings()
        {
            var a = new List <IPAddress> {
                new IPAddress(Ba(192, 168, 178, 0)),
                new IPAddress(Ba(192, 168, 178, 1)),
                new IPAddress(Ba(192, 168, 178, 2)),
                new IPAddress(Ba(192, 168, 178, 3)),
                new IPAddress(Ba(192, 168, 178, 4)),
                new IPAddress(Ba(192, 168, 178, 5)),
                new IPAddress(Ba(192, 168, 178, 6)),
                new IPAddress(Ba(192, 168, 178, 7))
            };
            var ip   = new IPAddress(Ba(192, 168, 178, 5));
            var mask = new NetMask(255, 255, 255, 248);

            TestSiblings(a, ip, mask);

            a = new List <IPAddress> {
                new IPAddress(Ba(10, 20, 3, 192)),
                // new IPAddress(Ba(10, 20, 3, 193)),
                new IPAddress(Ba(10, 20, 3, 194)),
                new IPAddress(Ba(10, 20, 3, 195)),
                new IPAddress(Ba(10, 20, 3, 196)),
                new IPAddress(Ba(10, 20, 3, 197)),
                new IPAddress(Ba(10, 20, 3, 198)),
                new IPAddress(Ba(10, 20, 3, 199)),
                new IPAddress(Ba(10, 20, 3, 200)),
                new IPAddress(Ba(10, 20, 3, 201)),
                new IPAddress(Ba(10, 20, 3, 202)),
                new IPAddress(Ba(10, 20, 3, 203)),
                new IPAddress(Ba(10, 20, 3, 204)),
                new IPAddress(Ba(10, 20, 3, 205)),
                new IPAddress(Ba(10, 20, 3, 206)),
                new IPAddress(Ba(10, 20, 3, 207))
            };
            ip   = new IPAddress(Ba(10, 20, 3, 193));
            mask = new NetMask(255, 255, 255, 240);

            TestSiblings(a, ip, mask, SiblingOptions.IncludeNetworkIdentifier | SiblingOptions.IncludeBroadcast);

            a.RemoveAt(a.Count - 1);
            TestSiblings(a, ip, mask, SiblingOptions.IncludeNetworkIdentifier);

            a.RemoveAt(0);
            TestSiblings(a, ip, mask, SiblingOptions.ExcludeAll);
        }
        public void GetSiblings()
        {
            var a = new List<IPAddress> {
                new IPAddress(Ba(192, 168, 178, 0)),
                new IPAddress(Ba(192, 168, 178, 1)),
                new IPAddress(Ba(192, 168, 178, 2)),
                new IPAddress(Ba(192, 168, 178, 3)),
                new IPAddress(Ba(192, 168, 178, 4)),
                new IPAddress(Ba(192, 168, 178, 5)),
                new IPAddress(Ba(192, 168, 178, 6)),
                new IPAddress(Ba(192, 168, 178, 7))
            };
            var ip = new IPAddress(Ba(192, 168, 178, 5));
            var mask = new NetMask(255, 255, 255, 248);

            TestSiblings(a, ip, mask);

            a = new List<IPAddress> {
                new IPAddress(Ba(10, 20, 3, 192)),
             // new IPAddress(Ba(10, 20, 3, 193)),
                new IPAddress(Ba(10, 20, 3, 194)),
                new IPAddress(Ba(10, 20, 3, 195)),
                new IPAddress(Ba(10, 20, 3, 196)),
                new IPAddress(Ba(10, 20, 3, 197)),
                new IPAddress(Ba(10, 20, 3, 198)),
                new IPAddress(Ba(10, 20, 3, 199)),
                new IPAddress(Ba(10, 20, 3, 200)),
                new IPAddress(Ba(10, 20, 3, 201)),
                new IPAddress(Ba(10, 20, 3, 202)),
                new IPAddress(Ba(10, 20, 3, 203)),
                new IPAddress(Ba(10, 20, 3, 204)),
                new IPAddress(Ba(10, 20, 3, 205)),
                new IPAddress(Ba(10, 20, 3, 206)),
                new IPAddress(Ba(10, 20, 3, 207))
            };
            ip = new IPAddress(Ba(10, 20, 3, 193));
            mask = new NetMask(255, 255, 255, 240);

            TestSiblings(a, ip, mask, SiblingOptions.IncludeNetworkIdentifier | SiblingOptions.IncludeBroadcast);

            a.RemoveAt(a.Count - 1);
            TestSiblings(a, ip, mask, SiblingOptions.IncludeNetworkIdentifier);

            a.RemoveAt(0);
            TestSiblings(a, ip, mask, SiblingOptions.ExcludeAll);
        }
Ejemplo n.º 34
0
        /// <summary>Gets the broadcast address of an <see cref="T:System.Net.IPAddress"/>.</summary>
        /// <param name="address">The address</param>
        /// <param name="mask">The net mask of the network</param>
        /// <returns>The broadcast address of an <see cref="T:System.Net.IPAddress"/></returns>
        public static IPAddress GetBroadcastAddress(this IPAddress address, NetMask mask)
        {
            if (address == null)
                throw new ArgumentNullException("address");
            if (mask == null)
                throw new ArgumentNullException("mask");

            if (address.AddressFamily != Sockets.AddressFamily.InterNetwork)
                throw new NotSupportedException(OnlyIPv4Supported);

            // TODO: Test

            var ipBytes = address.GetAddressBytes();
            var notMaskBytes = mask.GetMaskBytes().Not();

            var broadcastAddressBytes = notMaskBytes.Or(ipBytes);
            return new IPAddress(broadcastAddressBytes);
        }
Ejemplo n.º 35
0
        public void Start()
        {
            Stop();

            http_server = new HttpFileServer(HTTPPort, ServerDirectory);
            http_server.Start();

            tftp_server = new TFTPServer(BindAddress, TFTPPort, ServerDirectory);

            var net = new IPSegment(BindAddress.ToString(), NetMask.ToString());

            dhcp_server              = new DHCPServer(BindAddress, DHCPPort);
            dhcp_server.Loader       = loader;
            dhcp_server.HTTPBootFile = HTTPBootFile;
            dhcp_server.SubnetMask   = IPAddress.Parse("255.255.255.0");
            dhcp_server.PoolStart    = net.Hosts().First().ToIpAddress();
            dhcp_server.PoolEnd      = net.Hosts().Last().ToIpAddress();
            dhcp_server.Start();
        }
Ejemplo n.º 36
0
        /// <summary>Gets the host identifier (rest) an <see cref="T:System.Net.IPAddress"/>.</summary>
        /// <param name="address">The address</param>
        /// <param name="mask">The net mask of the network</param>
        /// <returns>The host identifier (rest) an <see cref="T:System.Net.IPAddress"/></returns>
        public static IPAddress GetHostIdentifier(this IPAddress address, NetMask mask)
        {
            if (address == null)
                throw new ArgumentNullException(nameof(address));
            if (mask == null)
                throw new ArgumentNullException(nameof(mask));
            if (address.AddressFamily != Sockets.AddressFamily.InterNetwork)
                throw new NotSupportedException(OnlyIPv4Supported);

            var maskBits = mask.GetMaskBytes();
            var ipBits = address.GetAddressBytes();

            // ~Mask & IP
            var retVal = maskBits.Not().And(ipBits);
            var bytes = new byte[NetMask.MaskLength];
            Buffer.BlockCopy(retVal, 0, bytes, 0, bytes.Length);

            return new IPAddress(bytes);
        }
Ejemplo n.º 37
0
        // vrátí adresu sítě pomocí adresy a masky
        private IPAddress GetNetwork(IPAddress addr)
        {
            var addrBytes = addr.GetAddressBytes();
            var maskBytes = NetMask.GetAddressBytes();

            byte[] result = new byte[4];
            for (int i = 0; i < addrBytes.Length; i++)
            {
                int tempByte = 0;
                int addrByte = addrBytes[i];
                int maskByte = maskBytes[i];
                for (int x = 0; x < 8; x++)
                {
                    tempByte += (addrByte % 2 * maskByte % 2) * (int)Math.Pow(2, x);
                    addrByte  = addrByte >> 1;
                    maskByte  = maskByte >> 1;
                }
                result[i] = (byte)tempByte;
            }
            return(new IPAddress(result));
        }
Ejemplo n.º 38
0
        // vrátí broadcast pomocí adresy a masky
        private IPAddress GetBroadCast()
        {
            var addrBytes = Address.GetAddressBytes();
            var maskBytes = NetMask.GetAddressBytes();

            byte[] result = new byte[4];
            for (int i = 0; i < addrBytes.Length; i++)
            {
                int tempByte = 0;
                int addrByte = addrBytes[i];
                int maskByte = maskBytes[i];
                for (int x = 0; x < 8; x++)
                {
                    tempByte += (int)(maskByte % 2 == 1 ? (addrByte % 2) * Math.Pow(2, x) : Math.Pow(2, x));
                    addrByte  = addrByte >> 1;
                    maskByte  = maskByte >> 1;
                }
                result[i] = (byte)tempByte;
            }
            return(new IPAddress(result));
        }
Ejemplo n.º 39
0
        /// <summary>
        /// Synchronous:
        ///     All result data can be optained via the Results property afterwards
        ///
        /// </summary>
        public void ExecuteScan()
        {
            List <IPAddress> ipAddresses = null;

            switch (_settings.IpMode)
            {
            case EipScanMode.AllSubnet:
                ipAddresses = NetMask.GetAllIp();
                break;

            case EipScanMode.Subnet:
                ipAddresses = NetMask.GetIpsInMask(((ScanStorageMaskData)_settings.Storage).MaskData.ToArray());
                break;

            case EipScanMode.Range:
                throw new NotImplementedException();

            case EipScanMode.List:
                ipAddresses = ((ScanStorageListData)_settings.Storage).IpAddresses;
                break;

            default:
                break;
            }
            if (ipAddresses == null)
            {
                throw new Exception("No ip Addresses in Stack");
            }
            _ps = new PingScan(pingScanSuccessCb, _settings.PingTimeout);

            _ps.InitScan(ipAddresses.ToArray());

            if (_settings.Mode == EScanMode.Synchronous)
            {
                while (ActiveTCPScan.Count > 0 || !_ps.PingCompleted)
                {
                    Thread.Sleep(100);
                }
            }
        }
Ejemplo n.º 40
0
        /// <summary>Gets the number of siblings an <see cref="T:System.Net.IPAddress"/> can have in a given network.</summary>
        /// <param name="mask">The net mask of the network</param>
        /// <param name="options">Options which addresses to include an which not</param>
        /// <returns>The number of siblings an <see cref="T:System.Net.IPAddress"/> can have in the given network.</returns>
        public static int GetSiblingCount(this NetMask mask, SiblingOptions options)
        {
            if (mask == null)
            {
                throw new ArgumentNullException(nameof(mask));
            }

            bool includeSelf              = BitHelper.IsOptionSet(options, SiblingOptions.IncludeSelf);
            bool includeBroadcast         = BitHelper.IsOptionSet(options, SiblingOptions.IncludeBroadcast);
            bool includeNetworkIdentifier = BitHelper.IsOptionSet(options, SiblingOptions.IncludeNetworkIdentifier);

            var hostPartBits = mask.GetMaskBytes().CountFromRight(false);
            var total        = 1 << hostPartBits;

            total -= includeSelf ? 0 : 1;
            total -= includeBroadcast ? 0 : 1;
            total -= includeNetworkIdentifier ? 0 : 1;

            // TODO: Testing

            return(total);
        }
Ejemplo n.º 41
0
        public void AndIp()
        {
            var m1 = new NetMask(255, 255, 255, 0);
            var ip1 = new IPAddress(Ba(255, 255, 0, 0));

            var mAnd = m1 & ip1;
            Assert.AreEqual(ip1, mAnd);

            mAnd = ip1 & m1;
            Assert.AreEqual(ip1, mAnd);

            mAnd = NetMask.BitwiseAnd(ip1, m1);
            Assert.AreEqual(ip1, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, ip1);
            Assert.AreEqual(ip1, mAnd);

            mAnd = NetMask.BitwiseAnd(m1, (IPAddress)null);
            Assert.AreEqual(IPAddress.Any, mAnd);

            mAnd = NetMask.BitwiseAnd((NetMask)null, ip1);
            Assert.AreEqual(IPAddress.Any, mAnd);
        }
Ejemplo n.º 42
0
        public void Cidr()
        {
            var a = new TestingCollection <byte[], int> {
                new BaITestItem(Ba(0x00, 0x00, 0x00, 0x00), 0),
                new BaITestItem(Ba(0xFF, 0x00, 0x00, 0x00), 8),
                new BaITestItem(Ba(0xFF, 0xFF, 0x00, 0x00), 16),
                new BaITestItem(Ba(0xFF, 0xFF, 0xFF, 0x00), 24),
                new BaITestItem(Ba(0xFF, 0xFF, 0xFF, 0xFF), 32),
                new BaITestItem(Ba(0xFF, 0xFF, 0xFE, 0x00), 23),
                new BaITestItem(Ba(0xFF, 0x80, 0x00, 0x00), 9),
                new BaITestItem(Ba(0xFF, 0xFF, 0x80, 0x00), 17),
                new BaITestItem(Ba(0xFF, 0xFF, 0xFE, 0x00), 23),
                new BaITestItem(Ba(0xFF, 0xFF, 0xFF, 0xF8), 29),
                new BaITestItem(Ba(0xFF, 0xFF, 0xFF, 0xFC), 30)
            };

            foreach (var i in a)
            {
                var nm   = new NetMask(i.ToTest1);
                int cidr = nm.Cidr;
                Assert.AreEqual(i.Expected, cidr);
            }
        }
Ejemplo n.º 43
0
 public void ConstructorEx()
 {
     var m3 = new NetMask(Ba(255, 255, 248, 0, 0));
 }
Ejemplo n.º 44
0
 public void GetMaskBytes()
 {
     var actual = Ba(255, 255, 248, 0);
     var m = new NetMask(actual);
     var expected = m.GetMaskBytes();
     Assert.IsTrue(actual.SequenceEqual(expected));
 }
Ejemplo n.º 45
0
        public void Or()
        {
            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(255, 255, 0, 0);

            var mOr = m1 | m2;
            Assert.AreEqual(m1, mOr);

            mOr = (NetMask)null | (NetMask)null; // wat
            Assert.AreEqual(NetMask.Empty, mOr);

            mOr = NetMask.BitwiseOr(m1, m2);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(m2, m1);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(m2, null);
            Assert.AreEqual(m2, mOr);

            mOr = NetMask.BitwiseOr(null, m1);
            Assert.AreEqual(m1, mOr);

            mOr = NetMask.BitwiseOr(null, null);
            Assert.AreEqual(NetMask.Empty, mOr);
        }
Ejemplo n.º 46
0
 public void ToStringTest()
 {
     //var m1 = new NetMask(255, 255, 248, 0);
     var m1 = new NetMask(21);
     var expected = "255.255.248.0 (11111111.11111111.11111000.00000000)";
     var str = m1.ToString();
     Assert.AreEqual(expected, str);
 }
Ejemplo n.º 47
0
        public void EqualityOperator()
        {
            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(255, 255, 248, 0);
            var m3 = new NetMask(255, 255, 0, 0);

            Assert.AreEqual(m1, m2);
            Assert.IsTrue(m1 == m2);
            Assert.IsFalse(m1 == m3);
            Assert.IsTrue(m1 != m3);
        }
Ejemplo n.º 48
0
        public void Cidr()
        {
            var a = new TestingCollection<byte[], int> {
                new BaITestItem( Ba(0x00, 0x00, 0x00, 0x00), 0),
                new BaITestItem( Ba(0xFF, 0x00, 0x00, 0x00), 8),
                new BaITestItem( Ba(0xFF, 0xFF, 0x00, 0x00), 16),
                new BaITestItem( Ba(0xFF, 0xFF, 0xFF, 0x00), 24),
                new BaITestItem( Ba(0xFF, 0xFF, 0xFF, 0xFF), 32),
                new BaITestItem( Ba(0xFF, 0xFF, 0xFE, 0x00), 23),
                new BaITestItem( Ba(0xFF, 0x80, 0x00, 0x00), 9),
                new BaITestItem( Ba(0xFF, 0xFF, 0x80, 0x00), 17),
                new BaITestItem( Ba(0xFF, 0xFF, 0xFE, 0x00), 23),
                new BaITestItem( Ba(0xFF, 0xFF, 0xFF, 0xF8), 29),
                new BaITestItem( Ba(0xFF, 0xFF, 0xFF, 0xFC), 30)
            };

            foreach (var i in a)
            {
                var nm = new NetMask(i.ToTest1);
                int cidr = nm.Cidr;
                Assert.AreEqual(i.Expected, cidr);
            }
        }
Ejemplo n.º 49
0
 /// <summary>Enumerates through the siblings of an <see cref="T:System.Net.IPAddress"/> in a network. Compliant to RFC 950 (2^n-2).</summary>
 /// <param name="address">The address</param>
 /// <param name="mask">The net mask of the network</param>
 public static IEnumerable<IPAddress> GetSiblings(this IPAddress address, NetMask mask)
 {
     return GetSiblings(address, mask, SiblingOptions.ExcludeUnusable);
 }
Ejemplo n.º 50
0
        /// <summary>Enumerates through the siblings of an <see cref="T:System.Net.IPAddress"/> in a network.</summary>
        /// <param name="address">The address</param>
        /// <param name="mask">The net mask of the network</param>
        /// <param name="options">Options which addresses to include an which not</param>
        public static IEnumerable<IPAddress> GetSiblings(this IPAddress address, NetMask mask, SiblingOptions options)
        {
            if (address == null)
                throw new ArgumentNullException(nameof(address));
            if (mask == null)
                throw new ArgumentNullException(nameof(mask));
            if (address.AddressFamily != Sockets.AddressFamily.InterNetwork)
                throw new NotSupportedException(OnlyIPv4Supported);

            bool includeSelf = BitHelper.IsOptionSet(options, SiblingOptions.IncludeSelf);
            bool includeBroadcast = BitHelper.IsOptionSet(options, SiblingOptions.IncludeBroadcast);
            bool includeNetworkIdentifier = BitHelper.IsOptionSet(options, SiblingOptions.IncludeNetworkIdentifier);

            bool alreadyReturnedSelf = false;

            var netPrefix = address.GetNetworkPrefix(mask);

            if (includeNetworkIdentifier)
            {
                netPrefix = address.GetNetworkPrefix(mask);
                if (netPrefix.Equals(address))
                    alreadyReturnedSelf = true;
                yield return netPrefix;
            }

            var selfAddressBytes = address.GetAddressBytes();

            var netPrefixBytes = netPrefix.GetAddressBytes();

            int cidr = mask.Cidr;
            uint maxHosts = 0xFFFFFFFF;

            if (cidr > 0)
                maxHosts = (uint)(1 << (8 * NetMask.MaskLength - cidr)) - 1;

            var hostBytes = new byte[NetMask.MaskLength];
            for (int hostPart = 1; hostPart < maxHosts; ++hostPart)
            {
                unchecked
                {
                    hostBytes[0] = (byte)(hostPart >> 24);
                    hostBytes[1] = (byte)(hostPart >> 16);
                    hostBytes[2] = (byte)(hostPart >> 8);
                    hostBytes[3] = (byte)(hostPart >> 0);
                }

                Debug.WriteLine("HostPart: " + hostPart.ToString("X2").PadLeft(8, '0') + " (" + BitConverter.ToString(hostBytes) + ")");

                var nextIpBytes = netPrefixBytes.Or(hostBytes);
                var nextIp = new IPAddress(nextIpBytes);

                if (!alreadyReturnedSelf)
                {
                    if (includeSelf)
                    {
                        if (nextIpBytes[0] == selfAddressBytes[0]
                         && nextIpBytes[1] == selfAddressBytes[1]
                         && nextIpBytes[2] == selfAddressBytes[2]
                         && nextIpBytes[3] == selfAddressBytes[3])
                            alreadyReturnedSelf = true;
                        yield return nextIp;
                    }
                    else if (nextIpBytes[0] != selfAddressBytes[0]
                          || nextIpBytes[1] != selfAddressBytes[1]
                          || nextIpBytes[2] != selfAddressBytes[2]
                          || nextIpBytes[3] != selfAddressBytes[3])
                        yield return nextIp;
                }
                else
                    yield return nextIp;
            }

            if (includeBroadcast)
            {
                var broadcastAddress = address.GetBroadcastAddress(mask);
                if (!address.Equals(broadcastAddress) || (address.Equals(broadcastAddress) && !alreadyReturnedSelf))
                    yield return broadcastAddress;
            }
        }
Ejemplo n.º 51
0
        public void Expand()
        {
            var expected = new NetMask(1);
            var actual = NetMask.Extend(NetMask.Empty, 1);
            Assert.AreEqual(expected, actual);

            expected = new NetMask(2);
            actual = NetMask.Extend(NetMask.Empty, 2);
            Assert.AreEqual(expected, actual);

            expected = new NetMask(2);
            actual = NetMask.Extend(new NetMask(1), 1);
            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 52
0
        public void Constructor()
        {
            var ip = IPAddress.Parse("255.255.248.0");
            var expected = new NetMask(255, 255, 248, 0);
            var actual = new NetMask(ip);
            Assert.AreEqual(expected, actual);

            var m1 = new NetMask(255, 255, 248, 0);
            var m2 = new NetMask(21);
            Assert.IsTrue(m1 == m2);

            var m3 = new NetMask(Ba(255, 255, 248, 0));
            Assert.IsTrue(m1 == m3);

            var m4 = new NetMask((byte[])null);
            Assert.IsTrue(m4 == NetMask.Empty);

            var m5 = new NetMask(Ba());
            Assert.IsTrue(m5 == NetMask.Empty);

            var m6 = new NetMask((IPAddress)null);
            Assert.IsTrue(m6 == NetMask.Empty);
        }
Ejemplo n.º 53
0
        public void EqualsImplementation()
        {
            int a = 2;
            var ip = new IPAddress(0);
            var m = new NetMask(255, 255, 255, 0);
            var m1 = new NetMask(255, 255, 255, 0);

            Assert.IsFalse(m.Equals(a));
            Assert.IsFalse(m.Equals(ip));
            Assert.IsFalse(m.Equals(null));
            Assert.IsFalse(m.Equals((object)null));

            Assert.IsTrue(m.Equals(m));
            Assert.IsTrue(m.Equals(m1));
            Assert.IsTrue(m1.Equals(m));
        }