MCPcopy Index your code
hub / github.com/retspen/webvirtcloud / reverseName

Method reverseName

vrtManager/IPy.py:796–845  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

794
795
796 def reverseName(self):
797 """Return the value for reverse lookup/PTR records as RFC 2317 look alike.
798
799 RFC 2317 is an ugly hack which only works for sub-/24 e.g. not
800 for /23. Do not use it. Better set up a zone for every
801 address. See reverseName for a way to achieve that.
802
803 >>> print IP('195.185.1.1').reverseName()
804 1.1.185.195.in-addr.arpa.
805 >>> print IP('195.185.1.0/28').reverseName()
806 0-15.1.185.195.in-addr.arpa.
807 >>> IP('::1:2').reverseName()
808 '2.0.0.0.1.ip6.arpa.'
809 """
810
811 if self._ipversion == 4:
812 s = self.strFullsize(0)
813 s = s.split('.')
814 s.reverse()
815 first_byte_index = int(4 - (self._prefixlen / 8))
816 if self._prefixlen % 8 != 0:
817 nibblepart = "%s-%s" % (
818 s[3 - (self._prefixlen / 8)], intToIp(self.ip + self.len() - 1, 4).split('.')[-1])
819 if nibblepart[-1] == 'l':
820 nibblepart = nibblepart[:-1]
821 nibblepart += '.'
822 else:
823 nibblepart = ""
824
825 s = '.'.join(s[first_byte_index:])
826 return "%s%s.in-addr.arpa." % (nibblepart, s)
827
828 elif self._ipversion == 6:
829 s = hex(self.ip)[2:].lower()
830 if s[-1] == 'l':
831 s = s[:-1]
832 if self._prefixlen % 4 != 0:
833 nibblepart = "%s-%s" % (s[self._prefixlen:], hex(self.ip + self.len() - 1)[2:].lower())
834 if nibblepart[-1] == 'l':
835 nibblepart = nibblepart[:-1]
836 nibblepart += '.'
837 else:
838 nibblepart = ""
839 s = list(s)
840 s.reverse()
841 s = '.'.join(s)
842 first_nibble_index = int(32 - (self._prefixlen / 4)) * 2
843 return "%s%s.ip6.arpa." % (nibblepart, s[first_nibble_index:])
844 else:
845 raise ValueError, "only IPv4 and IPv6 supported"
846
847 def make_net(self, netmask):
848 """Transform a single IP address into a network specification by

Callers 1

reverseNamesMethod · 0.80

Calls 3

intToIpFunction · 0.85
strFullsizeMethod · 0.80
lenMethod · 0.80

Tested by

no test coverage detected