사용되지 않은 첫 번째 고정 IP 주소 발견

사용되지 않은 첫 번째 고정 IP 주소 발견

192.168.0.0/24에서 사용되지 않은 첫 번째 IP 주소를 동적으로 검색해야 합니다. 이는 단일 스위치가 있고 DNS 또는 DHCP 서비스를 실행하는 호스트가 없는 소규모 네트워크에 있습니다. 기본적으로 모든 호스트는 자체적으로 고정 IP를 할당합니다. %post사용 가능한 고정 IP 주소가 무엇인지 알아낸 다음 이를 나 자신에게 할당하는 방법(RHEL 킥스타트 파일 - 섹션)이 필요합니다 .

이것이 내가 지금까지 생각해낸 것입니다:

#!/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내가 가지고 있는 것이 마음에 들면 참조를 변경하여 ks.cfg의 섹션 ifcfg-eth0에 놓을 것입니다 .%post

답변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

관련 정보