我需要動態發現 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
並將其放入%post
ks.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