Ich arbeite an einem Projekt, das die Fähigkeit erfordert, mit MAC und IP-Adressen zu arbeiten. In diesem speziellen Projekt habe ich eine Messung und eine obere und untere Grenze, um sie zu vergleichen, d. H. Die Messung muss innerhalb des Bereichs der oberen/unteren Grenzen liegen. Sowohl die Messung als auch die oberen/unteren Grenzwerte können MAC-Adressen, IP-Adressen, Hexadezimalwerte, Bin usw. sein. Ist es möglich, programmatisch zu prüfen, ob eine MAC/IP-Adresse innerhalb eines bestimmten Bereichs liegt? An dieser Stelle würde ich wahrscheinlich die MAC- oder IP-Adresse entweder in Hex oder Binär konvertieren und so vergleichen. Alle anderen Vorschläge sind willkommen.Arbeiten mit MAC und IP-Adressen in C#
UPDATE: Mithilfe der Informationen von dem Link, den alexn zur Verfügung gestellt hat, habe ich Richard Szalays Klasse implementiert, um nach IP-Adressbereichen für jeden zu suchen, der sie benötigt.
/// <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 - Vielen Dank für Ihre Hilfe, ich auf eine ähnliche Klasse für MAC-Adressen funktionieren die Methoden der Umsetzung Sie skizziert. Ich kann die Klassen in späteren Iterationen zugunsten Ihres minimalistischen Ansatzes eliminieren.
nur IPv4 oder IPv6 auch? – CodesInChaos