IP-адрес преобразует то, что мы могли видеть как двоичное число, в 128-битное представление с шестнадцатеричными числами (и некоторой другой логикой для сжатия нулевых последовательностей).
Число 10752
эквивалентно:
00 00 00 00 00 00 00 (hex)
00 00 00 00 00 2a 00
00000000 00000000 00000000 00000000 00000000 00000000 00000000 (bin)
00000000 00000000 00000000 00000000 00000000 00101010 00000000
или, таким образом, с двоеточиями между ними:
0000:0000:0000:0000:0000:0000:0000:2a00
и это на самом деле то, что вы получаете. Адреса IPv6 используют двойные двоеточия для удаления нулевых последовательностей.
Если мы сместим значение на 112 пунктов вверх (128-16), мы получим:
2a 00 00 00 00 00 00 (hex)
00 00 00 00 00 00 00
00101010 00000000 00000000 00000000 00000000 00000000 00000000 (bin)
00000000 00000000 00000000 00000000 00000000 00000000 00000000
что так:
2a00:0000:0000:0000:0000:0000:0000:0000
чтобы получить желаемый результат с помощью:
>>> ipaddress.IPv6Address(10752<<112)
IPv6Address('2a00::')
Обратите внимание, что вышеприведенное, однако, будет работать, только если данные меньше 2 16 = 65'536 , так как в противном случае требуется более 16 бит, а затем значение слишком большой, чтобы быть представленным адресом IPv6.