コード例 #1
0
        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);
        }
コード例 #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);
        }
コード例 #3
0
ファイル: NetMaskTests.cs プロジェクト: zx119/wake-on-lan
 public void ConstructorEx()
 {
     Assert.Throws <ArgumentException>(() =>
     {
         var m3 = new NetMask(Ba(255, 255, 248, 0, 0));
     });
 }
コード例 #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);
        }
コード例 #5
0
ファイル: NetMaskTests.cs プロジェクト: zx119/wake-on-lan
        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);
        }
コード例 #6
0
ファイル: NetMaskTests.cs プロジェクト: zx119/wake-on-lan
        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);
        }
コード例 #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);
        }
コード例 #8
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);
        }
コード例 #9
0
        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);
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #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));
        }
コード例 #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);
        }
コード例 #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;
            }
        }
コード例 #16
0
ファイル: NetData.cs プロジェクト: Dedrus/itlinescoreboard
        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());
        }
コード例 #17
0
 public NetworkInterface(IPAddress ipAddress,
                         NetMask netMask,
                         IPAddress broadcast,
                         IPAddress defaultRoute)
 {
     this.ipAddress    = ipAddress;
     this.netMask      = netMask;
     this.broadcast    = broadcast;
     this.defaultRoute = defaultRoute;
 }
コード例 #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);
            });
        }
コード例 #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);
            });
        }
コード例 #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);
        }
コード例 #21
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!
        }
コード例 #22
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!
        }
コード例 #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!
        }
コード例 #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!
        }
コード例 #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;
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #29
0
        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);
        }
コード例 #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));
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #33
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);
        }
コード例 #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);
        }
コード例 #35
0
ファイル: PXEServer.cs プロジェクト: swipswaps/PXE-Server
        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();
        }
コード例 #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);
        }
コード例 #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));
        }
コード例 #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));
        }
コード例 #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);
                }
            }
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #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);
            }
        }
コード例 #43
0
 public void ConstructorEx()
 {
     var m3 = new NetMask(Ba(255, 255, 248, 0, 0));
 }
コード例 #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));
 }
コード例 #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);
        }
コード例 #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);
 }
コード例 #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);
        }
コード例 #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);
            }
        }
コード例 #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);
 }
コード例 #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;
            }
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #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));
        }