MCPcopy
hub / github.com/Xyntax/POC-T / reverseName

Method reverseName

thirdparty/IPy/IPy.py:884–931  ·  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

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

Callers 1

reverseNamesMethod · 0.80

Calls 6

_getIPv4MapMethod · 0.95
intToIpFunction · 0.85
strFullsizeMethod · 0.80
splitMethod · 0.80
reverseMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected