家里用的是D-link路由器,不超過100塊那種。由於路由器年代久遠,偶爾會抽風連不了外網,這時就需要重啟路由器。一般常規的做法一是斷電重啟;二是登陸路由器系統設置選項進行重啟。有時路由器離電腦太遠了不想跑過去斷電,登陸路由器又有點煩鎖,什么打開瀏覽器輸入用戶名密碼找到系統設置選項再點擊重啟。於是就設想寫個python腳本,直接雙擊或者快捷鍵打開馬上重啟路由器。
用python來模擬人員登陸路由器設置界面進行重啟操作,人工操作其實最重要的就是兩步:一是登陸路由器,二是向路由器發送重啟的指令。
首先用burp site 抓取登陸路由器的信息
POST /session.cgi HTTP/1.1 Host: 192.168.5.1 Content-Length: 80 Origin: http://192.168.5.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: */* Referer: http://192.168.5.1/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8 Cookie: uid=PPgJoMGJTN REPORT_METHOD=xml&ACTION=login_plaintext&USER=admin&PASSWD=123456&CAPTCHA=
再抓取點擊重啟時發送到路由器的信息
POST /service.cgi HTTP/1.1 Host: 192.168.5.1 Content-Length: 12 Origin: http://192.168.5.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: */* Referer: http://192.168.5.1/tools_system.php Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8 Cookie: uid=S1pAXZvdoE EVENT=REBOOT
其實整個重啟過程就是兩個步驟:1登陸2重啟
電腦主要就是向路由器發送了上面兩段信息
python代碼如下:
import requests ip='192.168.5.1' username='admin' pwd='123456' header={ 'Host': ip, 'Origin': 'http://'+ip, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept':' */*', 'Referer': 'http://'+ip, 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8' } #登陸時向服務器POST的數據 login={ 'REPORT_METHOD':'xml', 'ACTION':'login_plaintext', 'USER':username, 'PASSWD':pwd, 'CAPTCHA':'' } #重啟時向路由器POST的數據 reboot={ 'EVENT':'REBOOT' } s=requests.session() #登陸路由器 login=s.post('http://'+ip+'/session.cgi',data=login,headers=header) print login.text #重啟路由器 reboot=s.post('http://'+ip+'/service.cgi',data=reboot,headers=header) print reboot.text
執行結果如下:
第一段<RESULT>SUCCESS<RESULT>表示登陸成功
第二段<result>OK<result>表示重啟成功