質問:IPアドレス192.168.115.67を数値に変換すると、次のようになりますか:
192 * 256 3 + 168 * 256 2 + 115 * 256 1 + 67 * 256 0 = 3232265027
または次のようになります:
192 * 256 0 + 168 * 256 1 + 115 * 256 2 + 67 * 256 3 = 1131653312
両方のバリアントをオンラインで見つけました。率直に言って、同じ変換プロセスバリアントを使用してすべての内部IP範囲比較を行う限り、問題はありません。しかし、IPv4アドレスからIP V6を計算したいのですが、両方のバリアントがWeb上にあるようです...結果としてIPv6アドレスが異なり、正しいのは1つだけです...
1131653312は.NETで提供されたバリアントであるため、1131653312バリアントを使用しますが、3232265027は、C ++で実行したときに使用したバリアントであり、IPv4からIPv6への変換用にWebで見つけたバリアントでもあります。 .NETがバリアント1131653312を使用していることを確認する前に使用しました...
4 に答える
間違いなく最初のものです。pingを実行して、pingユーティリティがそれをabcd表記に変換する方法を確認できます。この変換を行う場合は、次の式をお勧めします。(a << 24) | (b << 16) | (c << 8) | d
最初の数値はIPv6のIPv4互換性部分の最上位ビットに格納されるため、結果として得られる方法3232265027
は正しいはずです。
0000:0000:0000:0000:0000:ffff:AABB:CCDD
どこ
AA = 192
BB = 168
CC = 0
DD = 1
等
https://wikipedia.org/wiki/IPv6
256
また、 IPアドレスにを含めることはできません。値はそれぞれ0〜255です。
数値は、ネットワークを介してビッグエンディアンの順序で送信されます。これは、数値の書き込み方法と同じです(192が最上位バイトです)。したがって、最初の番号は「正しい」番号です。もう1つのバリエーションは、リトルエンディアンアーキテクチャで同じバイトがどのように解釈されるか、つまり.Netの動作です。
そうは言っても、質問が何なのかよくわからないので、この解説が一種の答えになることを願っています。
違いはエンディアンと関係があります。整数で格納していますが、プロセッサが異なれば、整数のバイト順序も異なります(大きい方または小さい方が先になります)。ただし、その番号は回線を介して送信する必要があるため、IPには、バイトを転送する必要がある特定の順序があります。この順序は、ビッグエンディアンとリトルエンディアンのマシンでは異なります。