DtDNS: Plugin 2
DtDNS: Introduction | Crude Updater | WhatsMyIP | PHP cURL 1 | PHP cURL 2 | IP Tracker | Plugin 1 | Plugin 2
|
|
DtDNS and automatic update |
A Twist
While writing this tutorial it became apparent two functions were ideal candidates for adding to the core functionality.
The two functions now integrated provide additional diagnostics. A side effect concept of a plugin faded away and no longer made sense. Hence the DtDNS automatic IP updater is included as a standard component within the plugin's folder. It requires configuring and enabling for CRON operation.
This page details how to configure and enable CRON operation.
Script
The final script shown below:
UniServer\plugins\dtdns_updater\dtdns_updater.php
<?php /* ############################################################################### # Name: The Uniform Server DtDNS Updater v 1.0 # Developed By: The Uniform Server Development Team # Modified Last By: Mike Gleaves (Ric) # Web: http://www.uniformserver.com ############################################################################### */ //error_reporting(0); // Disable PHP errors and warnings // Comment to Enable for testing chdir(dirname(__FILE__)); // Change wd to this files location include_once "../../unicon/main/includes/config.inc.php"; include_once "../../unicon/main/includes/functions.php"; run_location_tracker(); // Have servers moved if moved update configuration print"\n"; //######################## User Configuration ################################# // Add as many lines as required with the following format: // $id_pw[] = "hostname,password"; // For example: // $id_pw[] = "books.effers.com,fred123"; // $id_pw[] = "power.dtdns.net,gun22powder"; //----------------------------------------------------------------------------- $id_pw[] = "books.effers.com,fred123"; // Change $id_pw[] = "books.effers.com,fred123"; // Change or delete $id_pw[] = "books.effers.com,fred123"; // Change or delete //###################### END User Configuration ############################### $test = false; // Test true = display IP address and host names // false = no display foreach ($id_pw as $value) { // Iteratate through array $idpw_array = explode(",",$value); // Split id pw pairs if(get_ip_dns($idpw_array[0])){ // Was IP from DNS returned if(get_ip_current()){ // Yes: Current IP returned if($test){ // Test code print "DNS IP = $ip_dns CURRENT IP = $ip_current $idpw_array[0]<br/>\n"; } if($ip_dns != $ip_current){ // Are IP's different dtdns_update($idpw_array[0],$idpw_array[1]);// yes: Update required } } } }// End foreach //=== Get IP from DNS server ================================================== // Input: ID = Hostname: // Output: Return value true = IP was obtained // Output: Return value false = IP not obtained or error // Output: $ip_dns either IP address or host name function get_ip_dns($hostname){ global $ip_dns; // IP address saved from DNS server $ip_dns = gethostbyname($hostname); // Get IP address of hostname if($ip_dns == $hostname){ // Is hostname returned (not IP address) return false; // yes: failed to get IP address } else{ // no: IP obtained return true; // set success } } //============================================== END Get IP from DNS server === //=== DtDNS Host Update Page ================================================== // Input: $id = Hostname: // Input: $pw = User password // Output: Return value true = sucess false = failed function dtdns_update($id,$pw){ $id_val = urlencode($id); // User Host on DtDNS $pw_val = urlencode($pw); // User password $client_val = urlencode('UniServerV1'); // Optional - But added it $url = 'https://www.dtdns.com/api/autodns.cfm'; // DtDNS update page // Build complete URL $str= $url."?id=".$id_val."&pw=".$pw_val."&client=".$client_val; // Access page using Curl SSL $ch=curl_init(); // Initialize Curl get handle curl_setopt($ch,CURLOPT_URL,$str); // Set Curl URL option curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // no verify curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10); // timeout set to 10 sceonds curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); // curl_exec ouputs a string $buffer = curl_exec($ch); // run above, save to buffer curl_close($ch); // Close Curl frees memory // Test returned page if(preg_match("/now\spoints\sto/",$buffer)){// Is returne value "now points to" return true; // yes: update OK } else{ // no: Failed return false; } } //============================================== END DtDNS Host Update Page === ?> |
Manual Update
You can run this batch file to manually force an update, remember to leave around ten minuets before performing another update.
The final batch script shown below:
UniServer\plugins\dtdns_updater\Run_dtdns_updater.bat
COLOR B0 @echo off cls rem ### working directory current folder pushd %~dp0 ..\..\usr\local\php\php.exe dtdns_updater.php rem ### restore original working directory pause popd EXIT
Cron
Cron provides a periodic tick Uniform Server's default is every ten minutes.
DtDNS automatic updater has been pre-configured however it is disabled by default.
To enable Cron edit file UniServer\unicon\main\run_cron.php
Locate these two line in section List of scripts to be run
// $cmd = 'start ..\..\usr\local\php\php-win.exe ..\..\plugins\dtdns_updater\dtdns_updater.php'; // pclose(popen($cmd,'r')); // Start detatched process
and uncomment as shown below
$cmd = 'start ..\..\usr\local\php\php-win.exe ..\..\plugins\dtdns_updater\dtdns_updater.php'; pclose(popen($cmd,'r')); // Start detatched process
Notes:
- When the server is first started Cron is run and the IP addreess updated if different
- Every ten minuets Cron is run and the IP address are checked if different are updated.
- Cron only runs when the servers are running however you can force an update using the batch file mentioned above.
Summary
Interesting twist to this tutorial started life as a plugin only to become an integrated component.
Thought I would leave the tutorial as is it contains useful information should you want to design an IP updater for another provider.