As an alternative to using a simple HTTP request to update DynDNS information, some services make use of the GnuDIP protocol. The GnuDIP protocol is based on a challenge-response mechanism:
- The client opens the connection to the GnuDIP server.
- The server responds with a random value calculated for the session.
- The client uses the random value and the password to create a hash value, which is returned to the server.
- The server checks this hash value and reports its result by sending a number back to the client.
The GnuDIP protocol can exchange the messages between the client and server either via a simple TCP connection (standard port 3495) or as a CGI script running on an Internet server. The version using an HTTP request from a CGI script has the advantage that no additional ports have to be opened on the GnuDIP, and also that HTTP offers protection from passive interception and offline dictionary attacks.
Requests to a GnuDIP server are triggered by the device with an action in the following form:
- gnudip://<srv>[:port][/path]?<parameter>
- <srv> – The GnuDIP server address.
- [:port] – Specifying the port is optional. If it is not defined, default values are taken instead (3495 for TCP, 80 or 443 for HTTP/HTTPS).
- [/path] – Path information is only required by HTTP/HTTPS to define the location where the CGI script is stored.
- method=<tcp|http|https> – Selects the protocol to be used for the transmission between the GnuDIP server and client. Only one protocol can be selected here.
- user=<username> – Specifies the user name for the account on the GnuDIP server.
- pass=<password> – Specifies the password for the account on the GnuDIP server.
- domn=<domain> – Specifies the DNS domain containing the DynDNS entry.
- reqc=<0|1|2> – Defines the action that is triggered by the request. Action <0> sends the server a dedicated IP address that is to be used for the update. Action <1> deletes a DynDNS entry. Action <2> triggers an update, although no IP address is transmitted to the server. Instead, the server carries out the update with the IP address of the GnuDIP client.
- addr=<address> – Specifies the IP address that an action with the parameter <0> is to use for updating the DynDNS entry. If this is unspecified in a <0> action, the request is treated as a <2> action.
- gnudip://gnudipsrv?method=tcp&user=myserver&domn=mydomain.org &pass=password&reqc=0&addr=%a
- gnudip://gnudipsrv?method=tcp&user=myserver&domn=mydomain.org &pass=password&reqc=1
In response to the request, the GnuDIP server returns one of the following values to the GnuDIP client (assuming that the connection between server and client was established):
- 0 – The DynDNS entry was updated successfully.
- 0:address – The DynDNS entry was successfully updated with the specified address.
- 1 – Authentication at the GnuDIP server failed.
- 2 – The DynDNS entry was deleted successfully.
These responses can be processed by the device's actions to trigger further actions if necessary.