Скрипт за сканиране на MAC адреси в Proxmox

Скрипт за сканиране на MAC адреси в Proxmox

Този Bash скрипт е предназначен за сканиране на виртуални машини (VM) и контейнери в системата Proxmox VE за дублирани MAC адреси.

Скриптът генерира отчет, който показва MAC адресите на всички VM и контейнери, както и всички случаи на дублиране.

Изпълнение на скрипта:

Създайте нов файл, например check_mac_addresses.sh:

vi check_mac_addresses.sh

Добавете следния код в скрипта:

#!/bin/bash

echo "Checking MAC addresses of all VMs and containers..."

# Извличане на всички VM ID-та и добавяне на отстраняване на грешки
VM_IDS=$(qm list | awk 'NR>1 {print $1}')
echo "Found VM IDs: $VM_IDS"

declare -A mac_addresses
declare -A duplicates

for VM_ID in $VM_IDS; do
    echo "Checking VM ID: $VM_ID"
    # Извличане на мрежови конфигурации за дадена VM и добавяне на отстраняване на грешки
    NET_CONFIG=$(qm config $VM_ID | grep -i "net")
    echo "Network config for VM ID $VM_ID: $NET_CONFIG"
    
    # Извличане на MAC адреса от мрежовата конфигурация
    MAC=$(echo "$NET_CONFIG" | grep -oP '(?<=macaddr=)[^,]+')
    echo "VM ID $VM_ID has MAC address: $MAC"
    
    # Проверка за дублирани MAC адреси
    if [[ -n "$MAC" ]]; then
        if [[ -n "${mac_addresses[$MAC]}" ]]; then
            echo "Duplicate MAC address found: $MAC in VMs $VM_ID and ${mac_addresses[$MAC]}"
            duplicates[$MAC]="${duplicates[$MAC]} $VM_ID"
        else
            mac_addresses[$MAC]=$VM_ID
        fi
    fi
done

# Извличане на всички контейнерни ID-та и добавяне на отстраняване на грешки
CT_IDS=$(pct list | awk 'NR>1 {print $1}')
echo "Found container IDs: $CT_IDS"

for CT_ID in $CT_IDS; do
    echo "Checking container ID: $CT_ID"
    # Извличане на мрежови конфигурации за даден контейнер и добавяне на отстраняване на грешки
    NET_CONFIG=$(pct config $CT_ID | grep -i "net")
    echo "Network config for container ID $CT_ID: $NET_CONFIG"
    
    # Извличане на MAC адреса от мрежовата конфигурация
    MAC=$(echo "$NET_CONFIG" | grep -oP '(?<=hwaddr=)[^,]+')
    echo "Container ID $CT_ID has MAC address: $MAC"
    
    # Проверка за дублирани MAC адреси
    if [[ -n "$MAC" ]]; then
        if [[ -n "${mac_addresses[$MAC]}" ]]; then
            echo "Duplicate MAC address found: $MAC in containers $CT_ID and ${mac_addresses[$MAC]}"
            duplicates[$MAC]="${duplicates[$MAC]} $CT_ID"
        else
            mac_addresses[$MAC]=$CT_ID
        fi
    fi
done

echo "MAC address check completed."

if [ ${#duplicates[@]} -eq 0 ]; then
    echo "No duplicate MAC addresses found."
else
    echo "Duplicate MAC addresses detected:"
    for mac in "${!duplicates[@]}"; do
        echo "MAC address $mac is used by: ${duplicates[$mac]}"
    done
fi

Запазете скрипта

Направете файла изпълним с команда:

chmod +x check_mac_addresses.sh

Стартиране на скрипта

Стартирайте скрипта на вашия Proxmox сървър:

./check_mac_addresses.sh

    Този скрипт ще извлече списъка с всички виртуални машини, ще изтегли MAC адресите им и ще провери за дублирани адреси. Ако намери дублирани MAC адреси, ще ви уведоми в изхода.

    Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: