发现第一个未使用的静态 IP 地址

发现第一个未使用的静态 IP 地址

我需要动态发现 192.168.0.0/24 上第一个未使用的 IP 地址。这是一个只有一台交换机的小型网络,没有运行任何 dns 或 dhcp 服务的主机。基本上每个主机都会自行分配一个静态 IP。我需要一种方法(在 RHEL kickstart 文件 -%post部分中)找出可用的静态 IP 地址,然后将其分配给我自己。

这是我目前想到的:

#!/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

当我喜欢我所拥有的东西时,我会改变/tmp/output.txt指向的引用ifcfg-eth0并将其放入%postks.cfg 的部分。

答案1

你可以用下面的方法让事情变得更简单:

 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

相关内容