Je travaille sur un projet qui nécessite la possibilité de travailler avec des adresses MAC et IP. Dans ce projet particulier, j'ai une mesure et des limites supérieures et inférieures pour la comparer à, c'est-à-dire que la mesure doit être dans la plage des limites supérieure/inférieure. La mesure et les limites supérieures/inférieures peuvent toutes deux être des adresses MAC, des adresses IP, des hexs, des bin, etc. Est-il possible de vérifier par programme si une adresse MAC/IP se trouve dans une plage particulière? À ce stade, je suppose que je devrais convertir l'adresse MAC ou IP en hexadécimal ou binaire et à une comparaison de cette façon. N'importe quelles autres suggestions sont les bienvenues. MISE À JOUR: En utilisant l'information du lien alexn fourni, j'ai implémenté la classe de Richard Szalay pour vérifier les plages d'adresses IP ci-dessous pour tous ceux qui en ont besoin.Travailler avec les adresses MAC et IP en C#
/// <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 - Merci pour votre aide, je travaillerai sur une classe similaire pour les adresses MAC mettant en œuvre les méthodes que vous avez décrites. Je peux éliminer les classes, en faveur de votre approche minimaliste, dans les itérations ultérieures.
uniquement IPv4 ou IPv6 aussi? – CodesInChaos