Need to monitor when IP Address changes

David Adam zanchey at ucc.gu.uwa.edu.au
Thu Jan 13 22:03:35 PST 2005


> That's awesome.  Very simple.  Now how could I have it figure out if the
> IP address has actually changed?  I only want it to email me if it
> changes.  Sorry, I'm very fluent in Windows but have only been using
> FreeBSD for a couple of days.

Hi Brian,

Although you're getting a lot of people telling you to go with the dyndns,
I think that you're probably doing the right thing from a simplicity point
of view. I had no end of trouble getting the No-IP client running under
FreeBSD (although that may have a lot to do with the crappiness of my
ISP, and their bizarre cable login program).

I think what you want to do is schedule a cronjob (like a Scheduled Task
or at command on Windows) to run a script that looks something like the
attached.

Make sure you change the variables at the top:

Change the line that says IFACE="xl0" to set the interface you are
watching.
Change the line that says IPFILE="/var/tmp/ipfile" to something that the
user you are running cron as will have access to (should be ok there).
Change the line that says EADDRESS="zanchey at ucc.gu.uwa.edu.au" to use your
e-mail address. I don't want your IP updates :-)

If you need help learning how to schedule a cron job, ping the list again
and one of us should be able to help out.

(Incidentally, this won't run on 4.x, as it requires the -m option to grep
in order to avoid choking on interfaces with more than one IP. I'm sure
there's a way around this using awk or something.)

HTH,

David Adam
zanchey at ucc.gu.uwa.edu.au
-------------- next part --------------
#! /bin/sh
###
# Script to watch for IP address changes and mail when they happen
# Will perform... um, unpredictably, with multiple IP addresses per interface
# Written January 2005 by David Adam (zanchey at ucc.gu.uwa.edu.au)

### CHANGE THESE VARIABLES!
# Interface to watch
IFACE="xl0"
# File to use
IPFILE="/var/tmp/ipfile"
# Address to mail
EADDRESS="zanchey at ucc.gu.uwa.edu.au"

# Get current IP

CURRENT_IP=$(ifconfig $IFACE |grep -m 1 "inet " |awk '{print $2}' )

if [ ! -f $IPFILE ]; then
  touch $IPFILE
  echo $CURRENT_IP > $IPFILE  
fi

# Get previous IP

PREVIOUS_IP=$(cat $IPFILE)

#echo "Previous IP was $PREVIOUS_IP"

if [ "$CURRENT_IP" != "$PREVIOUS_IP" ]; then
#   echo "IPs are different!"
#   echo "Current IP is $CURRENT_IP"
   mail -s "IP Change: $CURRENT_IP"  $EADDRESS << EOM
The IP of your system has changed from $PREVIOUS_IP to $CURRENT_IP.
EOM
fi

echo "$CURRENT_IP" > $IPFILE


More information about the freebsd-newbies mailing list