Denis Waßmann 7 лет назад
Родитель
Сommit
5520beb16b
1 измененных файлов с 40 добавлено и 0 удалено
  1. 40 0
      code/ID2TLib/MacAddressGenerator.py

+ 40 - 0
code/ID2TLib/MacAddressGenerator.py

@@ -0,0 +1,40 @@
+from random import getrandbits
+
+class MacAddressGenerator:
+	def __init__(self, include_broadcast_macs = False, include_virtual_macs = False):
+		self.broadcast = include_broadcast_macs
+		self.virtual = include_virtual_macs
+		
+		self.generated = set()
+	
+	def random_mac(self) -> str:
+		while True:
+			mac = self._random_mac()
+			if mac not in self.generated:
+				self.generated.add(mac)
+				return mac
+	
+	def clear(self):
+		self.generated.clear()
+	
+	def generates_broadcast_macs(self) -> bool:
+		return self.broadcast
+	
+	def generates_virtual_macs(self) -> bool:
+		return self.virtual
+	
+	def set_broadcast_generation(self, broadcast: bool):
+		self.broadcast = broadcast
+	
+	def set_virtual_generation(self, virtual: bool):
+		self.virtual = virtual
+	
+	def _random_mac(self) -> str:
+		mac_bytes = bytearray(getrandbits(8) for i in range(6))
+		if not self.broadcast:
+			mac_bytes[0] &= ~1 # clear the first bytes' first bit
+		if not self.virtual:
+			mac_bytes[0] &= ~2 # clear the first bytes' second bit
+		
+		return ":".join("%02X" % b for b in mac_bytes)
+