Automox uses its own formula to generate and identify devices by generating a fingerprint of a device using these criteria:
const HARDWARE_ID_UUID = 'uuid'; // windows
const HARDWARE_ID_MACHINE_ID = 'machine-id'; // non-windows
const PROCESSOR_HASH = 'processor-hash';
const MEMORY_HASH = 'memory-hash';
const BIOS_HASH = 'bios-hash';
const SYSTEM_HASH = 'system-hash';
const HOSTNAME_INFO = "hostname-info";
const IP_ADDRESS_ID = 'ipaddress-info';
const MAC_ADDR_INFO = 'macaddr-info';
const DISK_INFO = 'disk-info';
const MINIMUM_MATCH_PERCENT = 40;
This set of criteria is what we use to generate an Automox UUID. The last line lists the variable (Minimum_Match_Percent) with the value 40. This means that if two devices have 40% or more matchable variables (meaning they're the same), Automox is not able to tell them apart. However, if the two devices have 39% or less of the same variables, then Automox is able to discern it as a unique device.
What if I have two devices that have the same Automox UUID?
There are multiple ways to address this issue:
- You can, for example, change the hostname.
- You can change the machine-id of the device (see: Linux Devices Share a UUID)
- You can change your BIOS, but this should be done by advanced users as this can have major impacts for the device.
There's also a script you can use that will retrieve these identifiable variables and output it on the screen. For Windows we can use PowerShell:
# Get UUID
$uuid = (Get-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID) -replace "-"
# Get hostname
$hostname = (Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty Name)
# Get IP address
$ipAddresses = Get-NetIPAddress | Where-Object { $_.InterfaceAlias -ne 'Loopback Pseudo-Interface 1' } | Select-Object IPAddress
# Get MAC address
$macAddress = (Get-NetAdapter | Where-Object { $_.Status -eq 'Up' } | Select-Object -ExpandProperty MacAddress)
# Get disk space
$diskSpace = Get-WmiObject -Class Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 } | Select-Object DeviceID, @{'Name'='FreeSpaceGB'; 'Expression'={ "{0:N2}" -f ($_.FreeSpace / 1GB) }}
# Display the information
Write-Output "UUID: $uuid"
Write-Output "Hostname: $hostname"
Write-Output "IP Addresses:"
$ipAddresses | ForEach-Object {
Write-Output $_.IPAddress
}
Write-Output "MAC Address: $macAddress"
Write-Output "Disk Space:"
$diskSpace | ForEach-Object {
Write-Output "Drive: $($_.DeviceID)"
Write-Output "Free Space: $($_.FreeSpaceGB) GB"
Write-Output ""
}
## GetHashes
$systemHash = (Get-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID) -replace "-"
$processorHash = (Get-WmiObject -Class Win32_Processor | Select-Object -ExpandProperty ProcessorId) -join ""
$memoryHash = (Get-WmiObject -Class Win32_PhysicalMemory | Select-Object -ExpandProperty SerialNumber) -join ""
$biosHash = (Get-WmiObject -Class Win32_BIOS | Select-Object -ExpandProperty SerialNumber) -join ""
Write-Host "System Hash: $systemHash"
Write-Host "Processor Hash: $processorHash"
Write-Host "Memory Hash: $memoryHash"
Write-Host "BIOS Hash: $biosHash"
For Linux, we can use Bash:
#!/bin/bash
# Get UUID
uuid=$(dmidecode -s system-uuid | tr -d '-')
# Get hostname
hostname=$(hostname)
# Get IP addresses
ipAddresses=$(hostname -I | tr ' ' '\n')
# Get MAC addresses
macAddresses=$(ip link show | grep -Eo '([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}' | grep -v '^00:00:00:00:00:00')
# Get disk space
diskSpace=$(df -h --output=source,avail | grep '^/dev' | awk '{print "Drive: "$1"\nFree Space: "$2"\n"}')
# Display the information
echo "UUID: $uuid"
echo "Hostname: $hostname"
echo "IP Addresses:"
echo "$ipAddresses"
echo "MAC Addresses:"
echo "$macAddresses"
echo "Disk Space:"
echo "$diskSpace"
# Get hashes
# System Hash
systemHash=$(dmidecode -s system-uuid | tr -d '-')
# Processor Hash
processorHash=$(dmidecode -t processor | grep 'ID:' | awk '{print $2}' | tr -d ' ')
# Memory Hash
memoryHash=$(dmidecode -t memory | grep 'Serial Number:' | awk '{print $3}' | tr -d ' ')
# BIOS Hash
biosHash=$(dmidecode -s bios-version | tr -d ' ')
# Display hashes
echo "System Hash: $systemHash"
echo "Processor Hash: $processorHash"
echo "Memory Hash: $memoryHash"
echo "BIOS Hash: $biosHash"