descubra o primeiro endereço IP estático não utilizado

descubra o primeiro endereço IP estático não utilizado

Preciso descobrir dinamicamente o primeiro endereço IP não utilizado em 192.168.0.0/24. Isso ocorre em uma rede pequena com um único switch, sem host executando nenhum serviço DNS ou DHCP. Basicamente, todo host atribui um IP estático. Eu preciso de uma maneira (em uma %postseção de arquivo de kickstart do RHEL) para descobrir qual é um endereço IP estático disponível e, em seguida, atribuí-lo a mim mesmo.

Isto é o que eu descobri até agora:

#!/bin/bash
USED_ADDRESSES_ARRAY=()
for address in `nmap -sT 192.168.0.0/24 | grep -B1 "Host is up" | grep 192 | awk '{print $5;}' | awk -F "." '{print $4;}'`
do
    USED_ADDRESSES_ARRAY+=($address)
done

ip_address_to_assign=0    
for target_address in {1..253}
do
  if [ $target_address  -ne ${USED_ADDRESSES_ARRAY[$target_address - 1]} ]
  then
    ip_address_to_assign=$target_address
    break
  fi
done
echo $ip_address_to_assign
cat > /tmp/output.txt << EOF3
DEVICE="eth0"
`grep HWADDR /etc/sysconfig/network-scripts/ifcfg-em1`
IPV6INIT="no"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.0.$ip_address_to_assign
NETMASK=255.255.255.0
GATEWAY=192.168.0.254"
EOF3
cat /tmp/output.txt

Quando gosto do que tenho, mudo as /tmp/output.txtreferências para apontar ifcfg-eth0e coloco na %postseção do ks.cfg.

Responder1

Você poderia simplificar com algo assim:

 for i in {1..253}; do 
  ping -c 1 192.168.0.$i >/dev/null; 
  if [ $? -ne 0 ]; then 
        echo "192.168.0.$i is unused"; 
        break; 
  fi; 
 done

informação relacionada