我正在开发一个需要能够使用MAC和IP地址的项目。在这个特定的项目中,我有一个测量值和一个上限和下限来比较它,即测量值必须在上限/下限范围内。测量和上/下限可以是MAC地址,IP地址,十六进制,二进制等。是否可以通过编程检查MAC/IP地址是否在特定范围内?在这一点上,我猜我必须将MAC或IP地址转换为十六进制或二进制,并进行比较。欢迎任何其他建议。在C中使用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地址类似的类上实现您所描述的方法。在稍后的迭代中,我可能会消除这些类,赞成你的极简主义方法。
只有IPv4或IPv6的也? – CodesInChaos 2010-11-23 19:46:00