管理者が有効な IP アドレスを指定して、そこから Web サービス リクエストを作成できるようにするアプリケーションがあります。構成済みの IP アドレスを取得して、着信要求と比較するだけです。2 つの IPv4 アドレスを比較するのは簡単ですが、2 つの IPv6 アドレスを比較するのも同様だと思いました。
しかし、IPv6 アドレスがもう少し複雑であることに気付いたとき、私のネットワークへの無知が露呈し始めました。私が気づいた 1 つの問題は、マシンの IP アドレス (VMWare コンソールが示す IP アドレスを表示していたもの) と、Web 要求からの IP アドレス ( HttpContext.Current.Request.UserHostAddress
.NET 内) を比較すると、そのうちの 1 つが次のように終わっていることに気付きました。 %10 と別の %11:
- ipconfig の表示: fe80:8179:5576:c6d0:8b16%11
- UserHostAddress の表示: fe80::8179:5576:c6d0:8b16%10
唯一の違いは %10 と %11 です。
また、IPv6 アドレスが「/」で終わり、その後に 2 桁の数字が続くことも確認しました。比較を行うときに、これらの最後の 3 桁 (存在する場合) を無視する必要がありますか? もしそうなら、私が探す必要がある有効な別のエンディングは何ですか?
- - - - - - 編集 - - - - - - -
提供された回答に基づく私の解決策は次のとおりです...
「スクラブされた」IP アドレスを保存し、それを「スクラブされた」IP アドレスと比較するだけです。ここで .NET を使用して、IP アドレスをスクラブします。パフォーマンスの観点からは最高ではありませんが、機能します。の比較をしたいのGetAddressBytes()
ですが、 を使用しているDictionary
ため、独自の を作成するという余分な手順を実行しないことにしましByteComparer
た。
IPAddress incomingIp = null;
bool ipAddressParsePassed = IPAddress.TryParse(userHostAddress, out incomingIp);
if (ipAddressParsePassed)
{
IPAddress scrubbedIp = new IPAddress(incomingIp.GetAddressBytes());
string scrubbedIpStr = scrubbedIp.ToString()
}