【发布时间】:2010-11-23 17:34:53
【问题描述】:
我正在从事一个需要能够使用 MAC 和 IP 地址的项目。在这个特定的项目中,我有一个测量值和一个上下限进行比较,即测量值必须在上限/下限的范围内。测量值和上限/下限都可以是 MAC 地址、IP 地址、十六进制、bin 等。是否可以以编程方式检查 MAC/IP 地址是否在特定范围内?在这一点上,我猜我必须将 MAC 或 IP 地址转换为十六进制或二进制,并以这种方式进行比较。欢迎任何其他建议。
更新:使用 alexn 提供的链接中的信息,我实现了 Richard Szalay 的类来检查下面的 IP 地址范围,以供其他需要它的人使用。
/// <summary>
/// Used for evaluating IPAddress ranges. Class courtesy of Richard Szalay's solution on http://stackoverflow.com/questions/2138706/c-how-to-check-a-input-ip-fall-in-a-specific-ip-range
/// </summary>
class IPAddressRange
{
private Byte[] _upperBytes, _lowerBytes;
private AddressFamily _addressFamily;
public IPAddressRange(IPAddress upper, IPAddress lower)
{
this._addressFamily = lower.AddressFamily;
this._upperBytes = upper.GetAddressBytes();
this._lowerBytes = lower.GetAddressBytes();
}
public Byte[] upperBytes
{
get { return _upperBytes; }
set { this._upperBytes = value; }
}
public Byte[] lowerBytes
{
get { return _lowerBytes; }
set { this._lowerBytes = value; }
}
/// <summary>
/// Determines if the IPAddress is within the range of the upper and lower limits defined in this class instance
/// </summary>
/// <param name="address">An address to check against pre-defined upper and lower limits</param>
/// <returns>True, if it's within range, false otherwise.</returns>
public bool IsInRange(IPAddress address)
{
if (address.AddressFamily != _addressFamily)
{
return false;
}
byte[] addressBytes = address.GetAddressBytes();
bool lowerBoundary = true, upperBoundary = true;
for (int i = 0; i < this.lowerBytes.Length &&
(lowerBoundary || upperBoundary); i++)
{
if ((lowerBoundary && addressBytes[i] < lowerBytes[i]) ||
(upperBoundary && addressBytes[i] > upperBytes[i]))
{
return false;
}
lowerBoundary &= (addressBytes[i] == lowerBytes[i]);
upperBoundary &= (addressBytes[i] == upperBytes[i]);
}
return true;
}
}
@JYelton - 感谢您的帮助,我将为 MAC 地址开发一个类似的类来实现您概述的方法。我可能会在以后的迭代中消除这些类,以支持您的极简主义方法。
【问题讨论】:
标签: c# .net visual-studio programming-languages