Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MacEUI48:
- allow_characters = "0123456789abcdefABCDEF"
- delimiters = "-:. "
- def __init__(self, mac_string):
- self.mac_string = mac_string
- def check_string_representation(self):
- if self.__has_trash_characters():
- return False
- else:
- hex_digits = self.__only_hex_digits()
- return self.__check_hex_digits(hex_digits) and self.__check_delimiters()
- def __has_trash_characters(self):
- for character in self.mac_string:
- if character not in self.allow_characters and character not in self.delimiters:
- return True
- return False
- def __only_hex_digits(self):
- return ''.join([character for character in self.mac_string if character in self.allow_characters])
- def __check_hex_digits(self, hex_digits):
- return len(hex_digits) == 12
- def __check_delimiters(self):
- delimiters_indexes = []
- for index, character in enumerate(self.mac_string):
- if character in self.delimiters:
- delimiters_indexes.append(index)
- # В "нормальной" записи МАС разделители могут быть на местах либо кратным 3, либо 5
- return delimiters_indexes == [2, 5, 8, 11, 14] or delimiters_indexes == [4, 9]
- def decimal_representation(self):
- if self.check_string_representation():
- return int(self.__only_hex_digits(), 16)
- else:
- return 'N/A'
- def __eq__(self, another_mac):
- return self.decimal_representation() == another_mac.decimal_representation()
- def __ne__(self, another_mac):
- return not self.__eq__(another_mac)
- def __first_octet(self):
- return self.__only_hex_digits()[0:2]
- def __second_octet(self):
- return self.__only_hex_digits()[2:4]
- def __third_octet(self):
- return self.__only_hex_digits()[4:6]
- def __fourth_octet(self):
- return self.__only_hex_digits()[6:8]
- def __fifth_octet(self):
- return self.__only_hex_digits()[8:10]
- def __sixth_octet(self):
- return self.__only_hex_digits()[10:12]
- def manufacter_code(self):
- return self.__first_octet() + self.__second_octet() + self.__third_octet()
- def windows_representation(self):
- windows_delimiter = '-'
- return windows_delimiter.join([self.__first_octet(), self.__second_octet(), self.__third_octet(),
- self.__fourth_octet(), self.__fifth_octet(), self.__sixth_octet()])
- def linux_representation(self):
- linux_delimiter = ':'
- return linux_delimiter.join([self.__first_octet(), self.__second_octet(), self.__third_octet(),
- self.__fourth_octet(), self.__fifth_octet(), self.__sixth_octet()])
- if __name__ == "__main__":
- win_mac = MacEUI48('ff-ff-ff-ff-ff-ff')
- lin_mac = MacEUI48('ff:ff:ff:ff:ff:ff')
- assert MacEUI48('ffff-ffff-ffff').check_string_representation()
- assert MacEUI48('ff-ff-ff-ff-ff-ff').check_string_representation()
- assert MacEUI48('ff:ff:ff:ff:ff:ff').check_string_representation()
- assert MacEUI48('ff:ff-ff:ff-ff.ff').check_string_representation()
- assert MacEUI48('ffff-ff:ff-ff.ff').check_string_representation() == False
- assert MacEUI48('fff-ffff-ffff').check_string_representation() == False
- assert MacEUI48('f:fff-ff:ff-ff.ff').check_string_representation() == False
- assert MacEUI48('fx-ff-ff-ff-ff-ff').check_string_representation() == False
- assert MacEUI48('ffff-ffff-ffff').manufacter_code() == 'ffffff'
- assert MacEUI48('ff-ff-ff-ff-ff-ff').manufacter_code() == 'ffffff'
- assert MacEUI48('ff:ff:ff:ff:ff:ff').manufacter_code() == 'ffffff'
- assert MacEUI48('ff:ff-ff:ff-ff.ff').manufacter_code() == 'ffffff'
- assert win_mac == lin_mac
- assert not win_mac != lin_mac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement