Я работаю над проектом, который требует умения работать с MAC и IP-адресами.В этом конкретном проекте у меня есть измерение и верхний и нижний пределы для сравнения, то есть измерение должно находиться в пределах верхнего / нижнего пределов.И измерение, и верхний / нижний пределы могут быть MAC-адресами, IP-адресами, шестнадцатеричным, двоичным и т. Д. Можно ли программно проверить, находится ли MAC / IP-адрес в определенном диапазоне?На данный момент, я предполагаю, что мне придется преобразовать MAC-адрес или IP-адрес в шестнадцатеричный или двоичный код и сравнить таким образом.Любые другие предложения приветствуются.
ОБНОВЛЕНИЕ: Используя информацию, предоставленную ссылкой, предоставленной alexn, я реализовал класс Ричарда Сзалая для проверки диапазонов IP-адресов ниже для всех, кому это необходимо.
/// <summary>
/// Used for evaluating IPAddress ranges. Class courtesy of Richard Szalay's solution on /1754961/kak-proverit-popadayt-li-vhodyaschie-ip-v-opredelennyi-diapazon-ip
/// </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-адресов, реализуя методы, которые вы описали.Я могу исключить классы в пользу вашего минималистского подхода в последующих итерациях.