Recommended Posts

So, if like me you've got BT's internet and have to use an echolife HG612 gateway and also run a server, you want your DNS to always be pointing to your IP even if it changes (Despite having a UPS, sometimes the line here drops for no reason and the IP changes).

So, I thought the ideal solution would be to just get the IP direct from the gateway itself! Now, I've reflashed my gateway to the stock echolife firmware so I have access to the web interface panel which this needs! Also note that it does some pretty lame output with the headers too. Anyway, this WILL need to be modified to work with your gateway I think, it works for mine with the specified WAN interface name!

Anyway, this in in PHP and uses CURL (I dislike CURL immensly but for some reason it wasn't liking my fsockopen and kept returning a piece of javascript code)

<?PHP
/*
	   Echolife WAN IP Retriever
	   Version 0.5
	   Created by n_K, 2012
	   Modify and use this script how you please.
*/
function DoCurl($URL, $POST = null, $Cookies = null)
{
		//Get a page using CURL.
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_URL, $URL);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_TIMEOUT, 6);
		curl_setopt($curl, CURLOPT_USERAGENT, 'EcholifeIPUpdater/0.5 (n_K)');
		curl_setopt($curl, CURLOPT_HEADER, true);
		if (!is_null($POST))
		{
				curl_setopt($curl, CURLOPT_POST, true);
				if (strlen($POST) > 2)
				{
						curl_setopt($curl, CURLOPT_POSTFIELDS, $POST);
				}
		}
		else
		{
				curl_setopt($curl, CURLOPT_POST, false);
		}
		if (!is_null($Cookies))
		{
				curl_setopt($curl, CURLOPT_COOKIE, $Cookies);
		}

		$result = curl_exec($curl);
		curl_close($curl);
		return $result;
}

function CurlCookies($Data)
{
		//Extract cookies from received data. (MODIFIED FOR USE WITH ECHOLIFE ONLY!)
		$Matches = preg_split('/Set-cookie:(.*?);/', $Data, -1, PREG_SPLIT_DELIM_CAPTURE);
		$i = 0;
		$Cookies = '';
		while ($i < count($Matches))
		{
				if ($i%2 == 1)
				{
						//Odd number-index!
						$Cookies .= $Matches[$i].'; ';
				}
				++$i;
		}
		$Cookies = substr($Cookies, 0, strlen($Cookies)-1);
		return $Cookies;
}

//Login to the modem as unpriviledged user and get the cookies
$Login = DoCurl('http://192.168.1.1/html/login.cgi?Username='./* PUT YOUR ECHOLIFE GATEWAY LOGIN USERNAME HERE */.'&Password='.rawurlencode(base64_encode(/* PUT YOUR ECHOLIFE GATEWAY PASSWORD HERE */)).'&Language=0&RequestFile=html/status/internetstatus.gz.html', 'a', 'Cookie=LoginTimes=0:LoginOverTime=0; FirstMenu=Admin_0; SecondMenu=Admin_0_0; ThirdMenu=Admin_0_0_0; sessionID=2222224564789011; Language=English');
$Cookies = CurlCookies($Login);

//Get the internet status page
$BigData = explode("\n", DoCurl('http://192.168.1.1/html/status/internetstatus.asp', null, $Cookies));
if (count($BigData) > 3)
{
		//Looks like we have some data to parse!
		foreach ($BigData as $ThisLine)
		{
				/* CHANGE YOUR GATEWAY INTERFACE BELOW TO WHAT IS DISPLAYED ON WAN PAGE 'WanPPP2' IN MY CASE */
				if (substr($ThisLine, 0, 14) == 'var WanPPP2 = ')
				{
						//We have it!
						$Data = $ThisLine;
						break;
				}
		}

		if (strlen($Data) > 5)
		{
				//Got it!
				/* CHANGE YOUR GATEWAY INTERFACE BELOW TO WHAT IS DISPLAYED ON WAN PAGE 'ptm1.101' IN MY CASE */
				$Data = explode(',', explode('ptm1.101",', $Data)[1]);
				/*
						0 = connected/not
						1 = IP
						2 = DNS servers
						3 = ?
						4 = ?
				*/
				if ($Data[0] == '"Connected"')
				{
						//Yay! We've got the IP!
						$IP = substr($Data[1], 1, (strlen($Data[1])-2));
						if (preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $IP, $BB) > 0)
						{
								//IP is in right format too!

/* PUT YOUR IP UPDATING/USING CODE HERE! */
						}
						else
						{
								//No valid IP found
						}
				}
				else
				{
						//Error, no connection!
				}
		}
		else
		{
				//Couldn't find WAN interface
		}
}
else
{
		//No data returned
}
?>

So there you go, maybe it'll be of use to someone!

Link to comment
https://www.neowin.net/forum/topic/1108769-getting-echolife-gateway-ip/
Share on other sites

"So, I thought the ideal solution would be to just get the IP direct from the gateway itself!"

Why is that? Why can you not just hit the update page of your dynamic dns provider from your server and have it use your source IP. This seems much more robust a solution than access your routers status page. And then you have to put in your code anyway to update your dyndns provider

/* PUT YOUR IP UPDATING/USING CODE HERE! */

Seems lot of extra steps when you could just hit the provider page and have it use the source IP your coming from as your update - this is how most of them work.

The servers have static IPs addressed as 192.168.1.x, and yes I could hit sites likes whatismyip.net and use them but there's no guarantee they're right, plus they might change the page layout/system like whatismyip.org which now has an image to stop you using it to get your IP in scripts.

Plus I don't have a dynamic IP providers, I've got 2 domains with DNS control on 123-reg (which was also a complete pain to get working via CLI).

And the last reason is that I've got multiple WAN connections, so the server that runs this script has internet out a different IP and interface than what the gateway is on so the IPs wouldn't be right anyway.

Who said anything about using whatmyip?

So your dns is hosted on 123 reg? I don't see anything on their site about adjustment of TTLs -- so even if your IP changes, what is the TTL if its anything more than a say a few minutes. Your server is going to be down for quite some time any any sort of IP change on your end. Not a optimal sort of setup at all, I would host your dns from a site that provides for dynamic updates and low ttls on the records.

No **** your servers behind your router are most likely going to have private ips -- if they were public it would be very unlikely that you were on a dynamic IP in the first place.

"so the server that runs this script has internet out a different IP and interface than what the gateway is on so the IPs wouldn't be right anyway."

Well that seems again like a pretty messed up way to do it ;) Why not just run the script on the server itself, or route the traffic to your update so it goes out the connection your servers would be accepting traffic on.

A simple http string quite often can update the IP that changes -- so for example on zoneedit with wget

wget -O - --http-user=username --http-passwd=password 'http://dynamic.zoneedit.com/auth/dynamic.html?host=www.mydomain.com'

There you go your IP is updated using the source IP you came from - run this on the server your wanting to point to, and shazam your IP would be updated. This looks a lot simpler than your convoluted method to me.

Also any dns provider that supports dynamic updates would most likely have a client you could just run on the service. zoneedit for example has clients that run on windows, linux and mac. Also have cross platform support with java, perl and python.

Seems to me your wasting a lot of time reinventing the wheel without spending a couple of minutes looking to see how it can be done easier, faster and better.

Signing up to a dyndns service would mean I'd have to move my domains and pay extra (dyndns charge more than static DNS providers).

123-reg does it pretty secure, i.e. it's SSL ONLY and it's all ajax so you've got to go through a lot of tosh to get various pieces of information you need to change things.

Short TTL is crap anyway, get a short TTL and suddenly everywhere stops accepting your emails. Although 123-reg has TTL of 24 hours I've found if I clear my DNS cache it and retry it'll update without 10 minutes.

OK just a random problem that I found out about earlier, the refurbished PC we got had it's network card set to jumbo packets and I was wondering why hotmail just refused to load and only some pieces of data came through, very slowly, not sure if it's a hotmail issue or an issue with this modem or what but disabling jumbo frames fixed it completely, so just a warning to people :)

This topic is now closed to further replies.
  • Posts

    • Just when I thought EA couldn't go lower. They surpassed my expectations
    • The GEEKOM A8 mini PC is 20% off (lower than Prime Day pricing) plus Huge Storewide Sale by Steven Parker GEEKOM is back with a deal on a variant of its A8 Mini PC powered by AMD's Ryzen 7 8945HS, which came out in 2024 with a TDP of just 45W, with a base clock of 3.8 GHz and a Turbo Boost of 4.9 GHz; although we never reviewed this variant, we did check out the Ryzen 9 version. As a reminder of what you get, below are the specifications for this Mini PC. GEEKOM A8 Dimensions 112.4 mm x 112.4 mm x 37 mm Weight 450g CPU Ryzen 7 8745HS (8 cores, 16 threads, 16MB L3 cache, 3.8 - 4.9 GHz, TDP: 45 W) cTDP: 35-54W (Default 45W) Graphics AMD Radeon™ 780M Graphics 12 RDNA 3 Graphics Cores 2700MHz 768 shading units / stream processors (12 CUs), 48 texture mapping units, and 32 ROPs NPU XDNA architecture (Up to 16 NPU TOPS) Memory 16GB Dual-channel Crucial DDR5-5600MT/s SODIMM (up to 64GB) Storage 1TB NVMe M.2 (PCIe Gen 4.0 x4) Operating System Windows 11 Pro Bluetooth Bluetooth v5.2 Wireless LAN Wi-Fi 6E Kensington Lock No SD Card reader Yes (left side) Adapter 120W, 6.32A, 19V Power Adapter Front I/O Ports 2 x USB 3.2 Gen 2 Type-A 1 x 3.5mm front stereo headset jack Rear I/O Ports 1 x USB 3.2 Gen 2 Type-A 1 x USB 4 Gen 3 Type-C with Power delivery up to 15W (5V 3A) 1 x USB 3.2 Gen 2 Type-C 1 x USB 2.0 Type-A 2 x HDMI 2.0b 1 x 2.5G RJ45 LAN 1 x DC-in Deal Price $519 (buying links below) GEEKOM has two configurations of the A8, with the only difference being the slightly less-powerful Ryzen 7 CPU with half the storage (1TB) and DDR5 memory (16GB). This knocks $350 off the price compared to the $999 Ryzen 9 configuration. In both instances, a Windows 11 Pro license is also pre-loaded. As I said previously, this appears to be an update on the A7 with the only difference being the newer CPU. The packaging has changed quite a bit from the A7. Instead of dark colors, now the box is completely white, and the foam cushion has been replaced by a cardboard mould that the A8 sits in, above a small envelope that contains a thank you card and booklet that has guidance on all of the controls, how to access the A8 to swap out the SSD or memory, and safety information in several European languages. Upon removing the cardboard mould, you can find another cardboard compartment that contains the power lead, HDMI cable, VESA plate, and a bag of screws. What’s In The Box 1 x A8 Mini PC 1 x Power Adapter 1 x HDMI Cable 1 x VESA plate and bag of screws 1 x Envelope with booklet and Thank you card Unlike the A7, the VESA mount option is back with the A8. In short, you have everything you need to get started. All products sold by GEEKOM receive a 3-year free Warranty from the date you receive the product. If needed, you can RMA or return locally relative to your region (the U.S. has a U.S. warehouse, mainland E.U. has a German warehouse). GEEKOM A8 at GEEKOM U.S. for $519 was $649 (20% off) GEEKOM A8 at GEEKOM U.K. for £503 was £629 (20% off) GEEKOM A8 at GEEKOM CA for $735.20 was $919 (20% off) Use coupon code NWGKA820 when checking out. This flash deal expires on July 2. Next up is the highest savings on the A7 Max series of Mini PC in the Spring Sale. The GEEKOM [2026 Edition] A7 MAX with AMD Ryzen 9 7940HS, 16GB DDR5, and 1TB SSD. Operating System: Windows 11 Pro CPU Model: Ryzen 9 7940HS CPU Speed: 5.2 GHz Cache Size: 24 MB Graphics Card Description: Integrated Graphics Coprocessor: AMD Radeon 780M Memory Storage Capacity: 16GB DDR5 SSD: 1 TB We reviewed this Mini PC back in January, and praised it for its modern internals like a dedicated NPU and DDR5 memory; as such, it is more than capable of keeping up with today's offerings of Mini PC on the market. GEEKOM A7 Max at GEEKOM U.S. for $587 (was $699) 16% off GEEKOM A7 Max at GEEKOM U.K. for £551 was £689 (20% off) Use coupon code NWGKA7MAX when checking out. This flash deal expires on July 2. Huge Summer Sale If the above deals don't tickle your fancy, from today, there are deep discounts on a range of other GEEKOM products. From June 15 to June 30, the GEEKOM Official Store will be running its Summer Sale, with discounts starting from 15% off across the entire lineup, up to 50%! This is their biggest promotion of the year so far, offering pricing that is even lower than select Prime Day deals. You can check out the discounts at the dedicated Summer Sale landing pages below. GEEKOM U.S. Summer Sale GEEKOM U.K. Summer Sale What's more, all products from GEEKOM receive a 3-year free Warranty from the date you receive the product. If needed, you can RMA or return locally relative to your region (the U.S. has a U.S. warehouse, mainland E.U. has a German warehouse, the U.K. has a U.K. warehouse, Australia has an AU warehouse). While the Summer Sale ends on June 30, deals on the A8 and A7 Max will remain active until July 2.
  • Recent Achievements

    • Week One Done
      Jeroen Wilms earned a badge
      Week One Done
    • Week One Done
      rolfus earned a badge
      Week One Done
    • One Month Later
      Leroy Jethro Gibbs earned a badge
      One Month Later
    • Conversation Starter
      flexorcist earned a badge
      Conversation Starter
    • One Month Later
      AndreaB earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      515
    2. 2
      +Edouard
      205
    3. 3
      PsYcHoKiLLa
      136
    4. 4
      ATLien_0
      88
    5. 5
      Steven P.
      85
  • Tell a friend

    Love Neowin? Tell a friend!