I have a Dlink DIR-615 that periodically drops its connection to the outside world. It appears to coincide with my wireless provider going down but the DLink never recovers. I don’t know why; but whatever.
I was going to use a relay Phrob to just power cycle it but figured I’d explore doing a soft reboot since that appears to bring the connection back up. Because the HTTP foo is not strong within me, I searched and found this article which gave me the basic steps required to login to a DLink and reboot it. It didn’t work and I didn’t need to append a “A” to the password; but after some futzing and looking at the POST headers in Google Chrome, I eventually reached this script that I put in cron:
#!/bin/sh # Check whether we can see google's DNS, if not, login to the router and reboot it. ADDR=192.168.34.3 ADMIN_PASS="Zm9vCg==" ping() { echo Pinging; ping -q -c 1 -n 8.8.8.8 >/dev/null && exit 0 } login() { curl -o - -X POST -d "html_response_page=login.asp&login_name=YWRtaW4A&login_pass=$ADMIN_PASS&graph_id=5190c&&log_pass=$ADMIN_PASS&graph_code=&login=Login" http://$ADDR/login.cgi | grep index.asp } reboot() { echo "Rebooting ... " ; curl -X POST -d "html_response_page=reboot.asp" http://$ADDR/reboot.cgi } ping || (login && reboot)
In order to encode your $ADMIN_PASS, you need to:
$ echo -n MYPASSWORD | base64
The ADMIN_PASS=”Zm9vCg==” above is what you’d get if your admin password was “foo”.
This works on my DIR-615, Hardware Version E3 and Firmware Version 5.10. Hope it helps someone.