def get_interface_mac(self, device): """ Returns currently-set MAC address of given interface. This is distinct from the interface's hardware MAC address. """ try: result = subprocess.check_output(["ifconfig", device], stderr=subprocess.STDOUT, universal_newlines=True) except subprocess.CalledProcessError: return None address = MAC_ADDRESS_R.search(result.upper()) if address: address = address.group(0) return address
def get_interface_mac(self, device): """ Returns currently-set MAC address of given interface. This is distinct from the interface's hardware MAC address. """ try: result = subprocess.check_output(['ifconfig', device], stderr=subprocess.STDOUT, universal_newlines=True) except subprocess.CalledProcessError: return None address = MAC_ADDRESS_R.search(result.upper()) if address: address = address.group(0) return address
def find_interfaces(self, targets=None): """ Returns the list of interfaces found on this machine as reported by the `networksetup` command. """ targets = [t.lower() for t in targets] if targets else [] # Parse the output of `networksetup -listallhardwareports` which gives # us 3 fields per port: # - the port name, # - the device associated with this port, if any, # - The MAC address, if any, otherwise 'N/A' details = re.findall( r"^(?:Hardware Port|Device|Ethernet Address): (.+)$", subprocess.check_output(("networksetup", "-listallhardwareports"), universal_newlines=True), re.MULTILINE, ) # Split the results into chunks of 3 (for our three fields) and yield # those that match `targets`. for i in range(0, len(details), 3): port, device, address = details[i : i + 3] address = MAC_ADDRESS_R.match(address.upper()) if address: address = address.group(0) current_address = self.get_interface_mac(device) if not targets: # Not trying to match anything in particular, # return everything. yield port, device, address, current_address continue for target in targets: if target in (port.lower(), device.lower()): yield port, device, address, current_address break
def find_interfaces(self, targets=None): """ Returns the list of interfaces found on this machine as reported by the `networksetup` command. """ targets = [t.lower() for t in targets] if targets else [] # Parse the output of `networksetup -listallhardwareports` which gives # us 3 fields per port: # - the port name, # - the device associated with this port, if any, # - The MAC address, if any, otherwise 'N/A' details = re.findall( r'^(?:Hardware Port|Device|Ethernet Address): (.+)$', subprocess.check_output(('networksetup', '-listallhardwareports'), universal_newlines=True), re.MULTILINE) # Split the results into chunks of 3 (for our three fields) and yield # those that match `targets`. for i in range(0, len(details), 3): port, device, address = details[i:i + 3] address = MAC_ADDRESS_R.match(address.upper()) if address: address = address.group(0) current_address = self.get_interface_mac(device) if not targets: # Not trying to match anything in particular, # return everything. yield port, device, address, current_address continue for target in targets: if target in (port.lower(), device.lower()): yield port, device, address, current_address break