Hack for remotely bouncing ZyXEL modem EQ-660R


EmbarqCenturyLink goes down so often, I finally had to hack together a lame heartbeat script to bounce the connection if it’s down. I run the script below via cron every 5 minutes. The target IP is this blog host, because it ought to be up and reachable. I later considered using the default route’s IP, but am too lazy to write the two pipes needed to tickle out just the IP from `ip route`.
require 'rubygems'
require 'net/ping'
require 'open4'
# Another idea is to use `ip route` and grep default.
# If the default ISP route is missing or cannot be pinged
# then the modem should be reset.
Net::Ping::TCP.service_check = false # seems to have no effect for TCP
p = Net::Ping::TCP.new('', 80)
unless p.ping? or p.ping? or p.ping?
    # debugging
    puts `ip route`
    puts `/sbin/ifconfig eth0`
    status = Open4::popen4("/bin/netcat -q0 23") do |pid, stdin, stdout, stderr|
        # Magic sequence to restart device
        stdin.puts "passwd"
        stdin.puts "24"
        stdin.puts "4"
        stdin.puts "21"


Post a Comment