Мне нужно динамически обнаружить первый неиспользуемый IP-адрес на 192.168.0.0/24. Это небольшая сеть с одним коммутатором, без хоста, на котором запущены какие-либо службы dns или dhcp. По сути, каждый хост самостоятельно назначает статический ip. Мне нужен способ (в %postразделе кикстарта RHEL ), чтобы выяснить, что является доступным статическим 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.
Итак, ваш сценарий работает? Почему бы и нет? Каков ожидаемый результат и что вы получаете? Кажется, все работает отлично, насколько я могу судить.
—
Тердон
Вы эффективно заново изобретаете DHCP ...
—
Ли Харрисон
Я полагаю, что более подходящим введением было бы «Можете ли вы найти способ сделать это лучше?». @ LeeHarrison, да, это кажется глупым. Но по этой причине в сети никогда не будет DHCP.
—
CHK
почему бы не установить машины для DHCP и получить адреса APIPA?
—
Келтари