Re: Finding DHCP IP of guest system

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



JohnS wrote:
Awsome but a Day Late and a Dollar Short && Care to share that shell
script please.

OK, but I warned you, it's a kludge.

#!/bin/bash
#
# Get a list of the hosts on the local network via nmap -sP and check # them against the ethers file to retrieve the host name, if any. # Check DNS to see if the DNS entries match it in the local domain and, # if not, make the necessary changes.
#
#  $Id$
#  Jay Leafey - 10/29/2009
#

TEST=0
test $# -gt 0 && TEST=1

NSUPDATES=$( mktemp -t dynamic_dns.XXXXXXXXXX )
ME=$( hostname -f )

echo "server localhost" > ${NSUPDATES}

nmap -sP 192.168.1.0/24 | \
while read f1 f2 f3 f4 f5
do
    if [ "${f1}" == "Host" ]
    then
                if [ "${f2}" == "${ME}" ]
                then
                        continue
                fi
                read m1 m2 m3 m4 m5
                MYIP=""
                if [ "${f2%.*}" == "192.168.1" ]
                then
                        MYIP=${f2}
                else
                        MYIP=$( echo "${f3}" | sed 's/[\(\)]//g' )
                fi
                MYMAC=${m3}
                MYHOST=$( grep -i "^${MYMAC}" /etc/ethers | awk "{ print \$2 }" | tr A-Z a-z)
                #~ echo "${MYMAC} ${MYIP} ${MYHOST}"

                if [ "${MYHOST}" ]
                then
                #~ Set the "forward" DNS entry
                        DNSIP=$( host ${MYHOST} 2>/dev/null | awk '/ has address / { print $NF}' )
                        if [ -z "${DNSIP}" ]
                        then
                                echo -e "update add ${MYHOST}.local 2400 IN A ${MYIP}\n" >> ${NSUPDATES}
                        elif [ "${MYIP}" != "${DNSIP}" ]
                        then
                                echo "update delete ${MYHOST}.local IN A ${DNSIP}" >> ${NSUPDATES}
                                echo -e "update add ${MYHOST}.local 240 IN A ${MYIP}\n" >> ${NSUPDATES}
                        fi
                        #~ Set the "reverse" DNS entry
                        DNSRR=$( host ${MYIP} | awk '/ domain name pointer / { print $1 }' )
                        DNSPTR=$( host ${MYIP} | awk '/ domain name pointer / { print $NF }' )
                        if [ -z "${DNSPTR}" ]
                        then
                                echo -e "update add ${MYIP##*.}.1.168.192.in-addr.arpa 2400 IN PTR ${MYHOST}.local.\n" >> ${NSUPDATES}
                        elif [ "${DNSPTR}" != "${MYHOST}.local." ]
                        then
                                echo "update delete ${DNSRR} IN PTR" >> ${NSUPDATES}
                                echo -e "update add ${DNSRR} 2400 IN PTR ${MYHOST}.local.\n" >> ${NSUPDATES}
                        fi
                fi
        fi
done
if [ ${TEST} -gt 0 ]
then
    cat ${NSUPDATES}
    exit
fi

if [ $( wc -l ${NSUPDATES} ) -gt 1 ]
then
#        cat ${NSUPDATES}
        nsupdate ${NSUPDATES}
        if [ $? -ne 0 ]
        then
                echo "nsupdate failed:"
                cat ${NSUPDATES}
        fi
fi

rm -f ${NSUPDATES}

exit

The code makes a LOT of assumptions that may only be valid in my home network, but perhaps the ideas will be useful. I have considered rewriting this in Perl, but it works and I really need the time for other projects.

&& Why you scrub the MACS?

Sheer paranoia and long-standing habit.

Enjoy!
--
Jay Leafey - jay.leafey@xxxxxxxxxxxx
Memphis, TN

<<attachment: smime.p7s>>

_______________________________________________
CentOS mailing list
CentOS@xxxxxxxxxx
http://lists.centos.org/mailman/listinfo/centos

[Index of Archives]     [CentOS]     [CentOS Announce]     [CentOS Development]     [CentOS ARM Devel]     [CentOS Docs]     [CentOS Virtualization]     [Carrier Grade Linux]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Linux USB]
  Powered by Linux