Return the value for reverse lookup/PTR records as RFC 2317 look alike. RFC 2317 is an ugly hack which only works for sub-/24 e.g. not for /23. Do not use it. Better set up a zone for every address. See reverseName for a way to achieve that. >>> print(IP('195.185.1.
(self)
| 882 | raise ValueError("only IPv4 and IPv6 supported") |
| 883 | |
| 884 | def reverseName(self): |
| 885 | """Return the value for reverse lookup/PTR records as RFC 2317 look alike. |
| 886 | |
| 887 | RFC 2317 is an ugly hack which only works for sub-/24 e.g. not |
| 888 | for /23. Do not use it. Better set up a zone for every |
| 889 | address. See reverseName for a way to achieve that. |
| 890 | |
| 891 | >>> print(IP('195.185.1.1').reverseName()) |
| 892 | 1.1.185.195.in-addr.arpa. |
| 893 | >>> print(IP('195.185.1.0/28').reverseName()) |
| 894 | 0-15.1.185.195.in-addr.arpa. |
| 895 | >>> IP('::1:2').reverseName() |
| 896 | '2.0.0.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.' |
| 897 | >>> IP('ff02::/64').reverseName() |
| 898 | '0.0.0.0.0.0.0.0.0.0.0.0.2.0.f.f.ip6.arpa.' |
| 899 | """ |
| 900 | |
| 901 | if self._ipversion == 4: |
| 902 | s = self.strFullsize(0) |
| 903 | s = s.split('.') |
| 904 | s.reverse() |
| 905 | first_byte_index = int(4 - (self._prefixlen // 8)) |
| 906 | if self._prefixlen % 8 != 0: |
| 907 | nibblepart = "%s-%s" % (s[3-(self._prefixlen // 8)], intToIp(self.ip + self.len() - 1, 4).split('.')[-1]) |
| 908 | nibblepart += '.' |
| 909 | else: |
| 910 | nibblepart = "" |
| 911 | |
| 912 | s = '.'.join(s[first_byte_index:]) |
| 913 | return "%s%s.in-addr.arpa." % (nibblepart, s) |
| 914 | |
| 915 | elif self._ipversion == 6: |
| 916 | ipv4 = self._getIPv4Map() |
| 917 | if ipv4 is not None: |
| 918 | return ipv4.reverseName() |
| 919 | s = '%032x' % self.ip |
| 920 | if self._prefixlen % 4 != 0: |
| 921 | nibblepart = "%s-%x" % (s[self._prefixlen:], self.ip + self.len() - 1) |
| 922 | nibblepart += '.' |
| 923 | else: |
| 924 | nibblepart = "" |
| 925 | s = list(s) |
| 926 | s.reverse() |
| 927 | s = '.'.join(s) |
| 928 | first_nibble_index = int(32 - (self._prefixlen // 4)) * 2 |
| 929 | return "%s%s.ip6.arpa." % (nibblepart, s[first_nibble_index:]) |
| 930 | else: |
| 931 | raise ValueError("only IPv4 and IPv6 supported") |
| 932 | |
| 933 | def make_net(self, netmask): |
| 934 | """Transform a single IP address into a network specification by |
no test coverage detected