Search code examples
.netipipv6ipv4

Converting an IP address to a number:


Question: When I convert the IP address 192.168.115.67 to a number, is it done like this:
192*2563 + 168*2562+115*2561+67*2560 = 3232265027

or like this:
192*2560 + 168*2561+115*2562+67*2563 = 1131653312

I find both variants online, and frankly it doesn't matter as long as I do all the internal IP-range comparison using the same conversion process variant. But I want to calculate the IP V6 from the IPv4 address, and it seems both variants are on the web... resulting in different IPv6 addresses, and only one can be correct...

I use the 1131653312 variant, as 1131653312 is the variant I saw .NET giving me, but 3232265027 is the variant I used when I did it in C++, and that is also the variant I find on the web for IPv4 to IPv6 conversion, and which I used before I saw that .NET uses variant 1131653312 ...


Solution

  • The method resulting in 3232265027 should be correct, as the first number is stored in the highest bits of the IPv4 compatibility part of IPv6:

    0000:0000:0000:0000:0000:ffff:AABB:CCDD

    where

    AA = 192
    BB = 168
    CC = 0
    DD = 1

    etc.

    https://wikipedia.org/wiki/IPv6

    Also, you can't have a 256 in an IP address. The values are 0 - 255 each.