Return a list with values forming the reverse lookup. >>> IP('213.221.113.87/32').reverseNames() ['87.113.221.213.in-addr.arpa.'] >>> IP('213.221.112.224/30').reverseNames() ['224.112.221.213.in-addr.arpa.', '225.112.221.213.in-addr.arpa.', '226.112.221.213.in-addr.a
(self)
| 740 | |
| 741 | |
| 742 | def reverseNames(self): |
| 743 | """Return a list with values forming the reverse lookup. |
| 744 | |
| 745 | >>> IP('213.221.113.87/32').reverseNames() |
| 746 | ['87.113.221.213.in-addr.arpa.'] |
| 747 | >>> IP('213.221.112.224/30').reverseNames() |
| 748 | ['224.112.221.213.in-addr.arpa.', '225.112.221.213.in-addr.arpa.', '226.112.221.213.in-addr.arpa.', '227.112.221.213.in-addr.arpa.'] |
| 749 | >>> IP('127.0.0.0/24').reverseNames() |
| 750 | ['0.0.127.in-addr.arpa.'] |
| 751 | >>> IP('127.0.0.0/23').reverseNames() |
| 752 | ['0.0.127.in-addr.arpa.', '1.0.127.in-addr.arpa.'] |
| 753 | >>> IP('127.0.0.0/16').reverseNames() |
| 754 | ['0.127.in-addr.arpa.'] |
| 755 | >>> IP('127.0.0.0/15').reverseNames() |
| 756 | ['0.127.in-addr.arpa.', '1.127.in-addr.arpa.'] |
| 757 | >>> IP('128.0.0.0/8').reverseNames() |
| 758 | ['128.in-addr.arpa.'] |
| 759 | >>> IP('128.0.0.0/7').reverseNames() |
| 760 | ['128.in-addr.arpa.', '129.in-addr.arpa.'] |
| 761 | >>> IP('::1:2').reverseNames() |
| 762 | ['2.0.0.0.1.ip6.arpa.'] |
| 763 | """ |
| 764 | |
| 765 | if self._ipversion == 4: |
| 766 | ret = [] |
| 767 | # TODO: Refactor. Add support for IPint objects |
| 768 | if self.len() < 2 ** 8: |
| 769 | for x in self: |
| 770 | ret.append(x.reverseName()) |
| 771 | elif self.len() < 2 ** 16L: |
| 772 | for i in range(0, self.len(), 2 ** 8): |
| 773 | ret.append(self[i].reverseName()[2:]) |
| 774 | elif self.len() < 2 ** 24L: |
| 775 | for i in range(0, self.len(), 2 ** 16): |
| 776 | ret.append(self[i].reverseName()[4:]) |
| 777 | else: |
| 778 | for i in range(0, self.len(), 2 ** 24): |
| 779 | ret.append(self[i].reverseName()[6:]) |
| 780 | return ret |
| 781 | elif self._ipversion == 6: |
| 782 | s = hex(self.ip)[2:].lower() |
| 783 | if s[-1] == 'l': |
| 784 | s = s[:-1] |
| 785 | if self._prefixlen % 4 != 0: |
| 786 | raise NotImplementedError, "can't create IPv6 reverse names at sub nibble level" |
| 787 | s = list(s) |
| 788 | s.reverse() |
| 789 | s = '.'.join(s) |
| 790 | first_nibble_index = int(32 - (self._prefixlen / 4)) * 2 |
| 791 | return ["%s.ip6.arpa." % s[first_nibble_index:]] |
| 792 | else: |
| 793 | raise ValueError, "only IPv4 and IPv6 supported" |
| 794 | |
| 795 | |
| 796 | def reverseName(self): |
nothing calls this directly
no test coverage detected