reverse_pointer
реализован следующим образом:
def _reverse_pointer(self):
"""Return the reverse DNS pointer name for the IPv6 address.
This implements the method described in RFC3596 2.5.
"""
reverse_chars = self.exploded[::-1].replace(':', '')
return '.'.join(reverse_chars) + '.ip6.arpa'
Таким образом, он явно не будет учитывать префикс.Обратите внимание, что в нем конкретно говорится об IPv6 адресе , а не о сети / префиксе.
Сначала вы получите лучший ответ, выполнив:
print(ipaddress.IPv6Network(u"2001:0db8:85a3::/48").network_address.reverse_pointer)
, что дает: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpa
которая является верной версией, даже если это не то, что вам нужно.
Вам нужно либо создать подкласс IPv6Network
и переписать _reverse_pointer
для вашей ссылки, либо напрямую изменить текущий результат, как показано ниже, это может работать, ноимеет крайние случаи:
print(ipaddress.IPv6Network(u"2001:0db8:85a3::/48").network_address.reverse_pointer[(2*(128-48)/4):])
3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpa
, потому что полный результат - 32 полубайта (шестнадцатеричная цифра), разделенных точкой (кроме конечного .ip6.arpa
), а 128-48
- количество битов для префиксачасть, и так как предыдущий в битах, вам нужно посчитать байты в шестнадцатеричном формате, так что /4
, но *2
, потому что каждый клев присутствует со следующей точкой.