列出子网中的所有 IP 地址
Posted
技术标签:
【中文标题】列出子网中的所有 IP 地址【英文标题】:List IP all addresses in a subnet 【发布时间】:2011-03-14 06:46:34 【问题描述】:我需要获取子网中包含的所有 IP 地址,我正在尝试使用 IPnetwork 来完成此操作
例如,子网 192.168.1.0/29 将具有以下输出:
// Output
// 192.168.1.0
// 192.168.1.1
// 192.168.1.2
// 192.168.1.3
// 192.168.1.4
// 192.168.1.5
// 192.168.1.6
// 192.168.1.7
这是我的代码:
IPNetwork ipn = IPNetwork.Parse("192.168.1.0/29");
IPAddressCollection ips = IPNetwork.ListIPAddress(ipn);
foreach (IPAddress ip in ips)
Console.WriteLine(ip);
// Output
// 192.168.1.0
// 192.168.1.0
// 192.168.1.0
// 192.168.1.0
// 192.168.1.0
// 192.168.1.0
如您所见,这不是预期的结果。我错过了什么?是否有其他工具或方法可以完成这项工作?我设法破解了一些东西,但它并不漂亮,我不确定它是否正确枚举了更大的子网。
【问题讨论】:
这看起来像是您正在使用的 ipnetwork 库中的一个错误。 我希望能找到过去使用过这个库的人,而不必修复这个人的代码......对于想要做 c# 子网划分的人来说,它得到了很多建议,所以我想我是在钓鱼;)。 【参考方案1】:ipnetwork 库已更新(至版本 1.3.1),其中包含涵盖此问题的补丁和测试单元。 可以在IPnetwork下载
【讨论】:
感谢您的更新。我很高兴接受你的回答。哦,图书馆运行良好,非常感谢您提供它。 不客气。我很高兴听到人们使用它。问候。【参考方案2】:我修复了 IPAddressCollection 类中的代码。它现在将显示子网中的所有 IP 地址,包括网络、网关、广播。例如,/29 将返回 ips .1 - .7。
这是修改后的修复。
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<IPAddress>, IEnumerator<IPAddress>
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<IPAddress> IEnumerable<IPAddress>.GetEnumerator()
return this;
IEnumerator IEnumerable.GetEnumerator()
return this;
#region IEnumerator<IPNetwork> 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
【讨论】:
以上是关于列出子网中的所有 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 获取连接在同一网络(子网)中的 IP 列表