List IP all addresses in a subnet

后端 未结 2 1042
借酒劲吻你
借酒劲吻你 2020-12-16 05:02

I need to get all of the IP addresses contained in within a subnet and I\'m trying to do it using IPnetwork

For example the subnet 192.168.1.0/29 would have the foll

2条回答
  •  一整个雨季
    2020-12-16 05:15

    I fixed the code in the IPAddressCollection class. It will now show all IP addresses in the subnet including network, gateway, broadcast. For example, a /29 would return ips .1 - .7.

    Here's the amended fix.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Collections;
    
    namespace LukeSkywalker.IPNetwork
    {
        public class IPAddressCollection : IEnumerable, IEnumerator
        {
            private IPNetwork _ipnetwork;
            private double _enumerator;
    
            internal IPAddressCollection(IPNetwork ipnetwork)
            {
                this._ipnetwork = ipnetwork;
                this._enumerator = -1;
            }
    
            #region Count, Array, Enumerator
    
            public double Count
            {
                get
                {
                    // return this._ipnetwork.Usable;
                    return this._ipnetwork.Usable + 2;
                }
            }
    
            public IPAddress this[double i]
            {
                get
                {
                    if (i >= this.Count)
                    {
                        throw new ArgumentOutOfRangeException("i");
                    }
    
                    IPNetworkCollection ipn = IPNetwork.Subnet(this._ipnetwork, 32);
    
                    // return ipn[0].Network;
    
                    return ipn[i].Network;
                }
            }
    
            #endregion
    
            #region IEnumerable Members
    
            IEnumerator IEnumerable.GetEnumerator()
            {
                return this;
            }
    
            IEnumerator IEnumerable.GetEnumerator()
            {
                return this;
            }
    
            #region IEnumerator Members
    
            public IPAddress Current
            {
                get { return this[this._enumerator]; }
            }
    
            #endregion
    
            #region IDisposable Members
    
            public void Dispose()
            {
                // nothing to dispose
                return;
            }
    
            #endregion
    
            #region IEnumerator Members
    
            object IEnumerator.Current
            {
                get { return this.Current; }
            }
    
            public bool MoveNext()
            {
                this._enumerator++;
                if (this._enumerator >= this.Count)
                {
                    return false;
                }
                return true;
            }
    
            public void Reset()
            {
                this._enumerator = -1;
            }
    
            #endregion
    
            #endregion
        }
    }
    

提交回复
热议问题