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

    • My father still uses a programme written in dbase3. Still manages to work with a little help from dosbox. 
    • Microsoft hides these secret Windows 11 performance boost settings available on every PC by Sayan Sen Windows enthusiasts often look for ways to extract as much performance out of their systems as possible, and it's often the case that they try and do so while trying to minimize the heat and power consumption. This is especially relevant in the case of mobile Windows PCs since laptops and notebooks tend to get hot and management of that heat and power is harder in such a form factor. As such users often turn to techniques like under-volting which can be used to squeeze out the maximum capabilities of a chip while also maintaining lowered power levels. There are official apps from AMD and Intel with the likes of Ryzen Master and XTU (Extreme Tuning Utility). While these are quite handy, most enthusiasts probably prefer to dig into the BIOS and play around with settings there like Curve Optimizer on Ryzen, which lets users set various frequency-voltage scaling values. These are essentially called P-States. If you are not familiar with them, Processor Power Management is done through Advanced Configuration and Power Interface (ACPI) P-states and C-states. While P-states or performance pwoer states handle CPU voltage-frequency scaling, C-states deal with CPU sleep states so that some of the CPU functions, which are not necessary at that moment, can be disabled. The P-states and C-states work together to make the processor run more efficiently. It helps the OS and apps determine which cores can be parked and which should be boosted. Of course not every user is an enthusiast or knows the technicalities and integrities of how things like overclocking or undervolting work. Thankfully for them Windows itself offers something pretty cool, though it is hidden by default on all systems. By default, Windows only has two P-States, "Minimum Processor State" and "Maximum Processor State." However, this can be changed with a Registry trick to expand the options under a secret "Processor performance boost mode" dropdown. This essentially enables the HWP or hardware P-States available on a device, and these are not controlled just by the OS itself as the underlying hardware gets involved too. In total there are five Processor Performance Boost Mode profiles that control how Windows requests and allows CPU turbo/boost behavior under the different power policies. They are: Disabled: In this mode, processor boosting is effectively turned off. The CPU will avoid entering turbo or boost frequencies and instead operate closer to its base frequency ceiling. This can significantly reduce power consumption and heat output, but at the cost of reduced burst performance and responsiveness in short workloads. Enabled: This is the standard behavior where boost functionality is allowed under normal conditions. The processor can opportunistically increase frequency when workload demands it, balancing performance gains with power and thermal constraints as managed by the system. Aggressive: Aggressive mode favors performance more heavily, allowing the CPU to enter higher boost states more readily and sustain them longer. This should in theory improve responsiveness under bursty or heavy workloads but increases power draw and thermal output compared to the default enabled behavior. Efficient Enabled: This mode still allows boosting, but with a stronger bias toward energy efficiency. The system attempts to use boost more selectively, avoiding unnecessary frequency spikes when the performance gain is marginal. Efficient Aggressive: This is a hybrid approach where boost is still performance-responsive, but the system continuously weighs efficiency more heavily than in Aggressive mode. It aims to deliver noticeable performance improvements while reducing wasted power in less demanding scenarios. Here's how to enable the Processor performance boost mode: Open Registry Editor: Press Win+R, type regedit, and click OK. Go to: HKLM\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\be337238-0d82-4146-a960-4f3749d470c7 (where HKLM stands for HKEY_LOCAL_MACHINE_) Modify the value of Attributes from 1 to 2 (you can find modify option by right-clicking) After that, exit Registry, you should now be able to see the new "Processor performance boost mode" dropdown menu: As you can see there are now five new P-States or CPPC states or power profile available that help define the boost mode processor setting on your PC. Wrapping it up here's a quick run-down of the settings as defined by Microsoft itself. Setting Description Disabled The corresponding P-state-based behaviour is disabled. Collaborative Processor Performance Control (CPPC) behaviour is disabled. Enabled The corresponding P-state-based behaviour is enabled. CPPC behaviour is Efficient Enabled. Aggressive The corresponding P-state-based behaviour is enabled. CPPC behaviour is Aggressive. Efficient Enabled The corresponding P-state-based behaviour is Efficient. CPPC behaviour is Efficient Enabled. Efficient Aggressive The corresponding P-state-based behaviour is Efficient. CPPC behaviour is Aggressive. Aggressive At Guaranteed Windows calculates the desired extra performance above the guaranteed performance level, and asks the processor to deliver that specific performance level. Efficient Aggressive At Guaranteed Windows always asks the processor to deliver the highest possible performance above the guaranteed performance level. In the next part we shall be comparing these settings to explore how much of a benefit or regression they can provide in terms of performance and power efficiency. If you decide to change the values on your system and are experiencing problems like crashes or an overheating PC, make sure to revert the steps back to the original state.
    • I think he means you haven't reviewed previous UFC games. Of course it doesn't matter... Every time you just report on something that involves the President even if just simply what happened you guys usually get accused of being anti-Trump. We live in fun times.
  • Recent Achievements

    • 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
    • One Month Later
      agatameier earned a badge
      One Month Later
    • Week One Done
      agatameier earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      518
    2. 2
      +Edouard
      198
    3. 3
      PsYcHoKiLLa
      147
    4. 4
      ATLien_0
      93
    5. 5
      Steven P.
      77
  • Tell a friend

    Love Neowin? Tell a friend!