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.