私は現在、他のいくつかのSO投稿から派生したこのメソッドを持っています:
public bool IsIPAddressInRange(IPAddress ipAddress)
{
int startIntAddress = BitConverter.ToInt32(StartingIPAddress.GetAddressBytes(), 0);
int endIntAddress = BitConverter.ToInt32(EndingIPAddress.GetAddressBytes(), 0);
int intIpAddress = BitConverter.ToInt32(ipAddress.GetAddressBytes(), 0);
return startIntAddress <= intIpAddress && intIpAddress <= endIntAddress;
}
IPv6 をサポートするためにこのロジックを拡張しようとすると、明らかにいくつかの落とし穴があります。すなわち:
- より長いフィールド長をサポートするには、Int32 の代わりに BigInt を使用する必要がありますか?
- IPv6 アドレスの表現は、簡単にバイトに変換できないように見えますか?
これに取り組む方法について誰かアドバイスがあるかどうか疑問に思っています。