0

I have a ISP with DynDns service where I am supposed to make the server use http to communicate with the DynDns servers at the ISP. It goes like this:

https://[username]:[password]@dyndns.myisp.com/nic/update?hostname=[host]&myip=[ip] 

Now here is my problem: I don't know how to make my server "use" this http command to change the IP. I mean I know about cronjobs and how to make a simple bash script but I don't know what command to use to make my machine "visit" this page.

2
  • wget probably works. Jun 12, 2014 at 16:36
  • curl can also be used when interacting with web services.
    – roadmr
    Jun 12, 2014 at 17:12

1 Answer 1

1

Usually a server does just that, it serves, assuming you are talking about an HTTP server.

In most cases the router - DSL modem is responsible for doing such things. Check the following which may apply to your situation:

Typical home users acquire dynamic IP addresses from their ISPs almost each time they connect to the internet or when their lease ends.

When such user want to host a home server available to internet must choose between two solutions:

  • Pay for a static IP
  • Find a Dynamic DNS service

While using the second solution, the following things apply:

  1. The user keeps the dynamic nature of the IPs
  2. The user informs the Dynamic DNS service each time a new dynamic IP has been assigned to him.
  3. The Dynamic DNS service maps the user's IP to a URL.

The second part of the process above usually is done either by the ueser' router - DSL modem or by a daemon (service) application running in user's computer - server. The service logs in to the Dynamic DNS provider and informs the provider about the user's current IP address.

To complete the above task, first look in your router - DSM modem settings which is the most clean and simple method. If the modem does not support this feature, refer to the ISP if they provide an application for the task. Lastly run a script in the server each time a new IP is been acquired or every n minutes (typically not less than 10 minutes).

Examples of various methods to report to Dynamic DNS Service that a new IP has been acquired:

#!/bin/bash

#################################################################
## ChangeIP.com bash update script                             ##
#################################################################
## Written 3/18/09 by Tom Rinker, released to the Public Domain##
#################################################################
## This is a simple bash script to preform a dDNS update with  ##
## ChangeIP.com. It uses only bash and wget, and so should be  ##
## compatible with virtually any UNIX/Linux based system with  ##
## bash. It is intended to be executed as a cron job, and      ##
## will only execute an update of dDNS records when the IP     ##
## address changes. As ChangeIP.com dDNS records have a 5 min  ##
## Time-To-Live, it is basically pointless and wasteful to     ##
## execute it more often than every 5 minutes. This script     ##
## supports logging all activity, in 3 available log levels,   ##
## and supports simple management of log file size.            ##
#################################################################
## To use this script:                                         ##
## 1) set the variables in the script below                    ##
## 2) execute the script as a cron job                         ##
#################################################################
## WARNING: This script has two potential security holes.      ##
## First, the username and password are stored plaintext in    ##
## the script, so a system user who has read access to the     ##
## script could read them. This risk can be mitigated with     ##
## careful use of file permissions on the script.              ##
## Second, the username and password will show briefly to other##
## users of the system via ps, w, or top. This risk can be     ##
## mitigated by moving the username and password to .wgetrc    ##
## This level of security is acceptable for some installations ##
## including my own, but may be unacceptable for some users.   ##
#################################################################

################ Script Variables ###############################
IPPATH=/var/log/IP                    # IP address storage file
TMPIP=/tmp/tmpIP                      # Temp IP storage file
LOGPATH=/var/log/changeip.log         # Log file
TEMP=/tmp/temp                        # Temp storage file
CIPUSER=                              # ChangeIP.com Username
CIPPASS=                              # ChangeIP.com Password
CIPSET=1                              # ChangeIP.com recordset
LOGLEVEL=2                            # 0=off,1=normal,2=verbose
LOGMAX=500                            # Max log lines, 0=unlimited
#################################################################

# get current IP from ip.changeip.com, and store in $TEMP
wget -q -U "rinker.sh wget 1.0" -O $TEMP ip.changeip.com

# parse $TEMP for the ip, and store in $TMPIP
grep IPADDR < $TEMP | cut -d= -s -f2 | cut -d- -s -f1 > $TMPIP

# compare $IPPATH with $TMPIP, and if different, execute update
if diff $IPPATH $TMPIP > /dev/null
  then                                # same IP, no update
      if [ $LOGLEVEL -eq 2 ]
        then                          # if verbose, log no change
          echo "--------------------------------" >> $LOGPATH
          date >> $LOGPATH             
          echo "No Change" >> $LOGPATH
          echo -e "IP: \c" >> $LOGPATH
          cat $IPPATH >> $LOGPATH
      fi
  else                                # different IP, execute update
      wget -q -U "rinker.sh wget 1.0" -O $TEMP --http-user=$CIPUSER --http-password=$CIPPASS "https://nic.changeip.com/nic/update?cmd=update&set=$CIPSET"
      if [ $LOGLEVEL -ne 0 ]
        then                          # if logging, log update
          echo "--------------------------------" >> $LOGPATH
          date >> $LOGPATH             
          echo "Updating" >> $LOGPATH
          echo -e "NewIP: \c" >> $LOGPATH
          cat $TMPIP >> $LOGPATH
          if [ $LOGLEVEL -eq 2 ]
            then                      # verbose logging
              echo -e "OldIP: \c" >> $LOGPATH
              cat $IPPATH >> $LOGPATH
              cat $TEMP >> $LOGPATH   # log the ChangeIP.com update reply
          fi
      fi
      cp $TMPIP $IPPATH               # Store new IP
fi

# if $LOGMAX not equal to 0, reduce log size to last $LOGMAX number of lines
if [ $LOGMAX -ne 0 ]
  then
      tail -n $LOGMAX $LOGPATH > $TEMP
      cp $TEMP $LOGPATH
fi

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .