linux下的python里面如何用相关的网络模块来重启tp-link路由器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下的python里面如何用相关的网络模块来重启tp-link路由器?相关的知识,希望对你有一定的参考价值。
我用python写脚本用,里面涉及到要换ip,于是要重启路由器。怎样用python里面的相关网络模块(例如urllib,urllib2等)来控制路由器?
我现在的障碍是我无法用python登录我的tplink路由器,所以也就无法利用post的方法来重启。
你说的总体是可行的,路由器都会提供一个web 的访问控制界面,python urllib2 可以利用POST 的方式登录,加一个header 就可以了,下面是登录一个BBS 的代码的header:
req=urllib.request.Request(url)req.add_header('User-agent','Mozilla/5.0')
req.add_header('Content-Type','application/x-www-form-urlencoded')
params=urllib.parse.urlencode('id':username,
'login.x':24,
'login.y':8,
'login':'登陆',
'pw':password,
'titletype':'forum'
)
params=params.encode('gb2312')
print('Send request! waiting respose.....')
res=urllib2.urlopen(req,params)
下面是我ppp登录路由器的方式:
#
# License: GNU GPL v2
#
# Script for comtrend hg536+ ( firmware A101-302JAZ-C03_R21.A2pB021g.d15h )
# This scripts connect to router and reset ip in 45s. In this example use default values for jazztel .
import getpass
import sys
import telnetlib
import time
HOST = "192.168.1.1"
LOGIN = "admin"
PASS = "admin"
PROMPT = " -> "
WAITTIME = 40 # Number of second
CONNECTIONNAME = "0.8.35 2" # to see your connections, manually connect to router (telnet 192.168.1.1) and use "wan show" .You should choose you PPPoE connection Use a combination of VCC + Con Id. For example ""0.8.35 2""
tnt = telnetlib.Telnet(HOST)
tnt.read_until("Login: ")
tnt.write(LOGIN + "\\n")
tnt.read_until("Password: ")
tnt.write(PASS + "\\n")
tnt.read_until(PROMPT)
tnt.write("ppp config " + CONNECTIONNAME + " down\\n")
time.sleep(3)
tnt.write("\\n")
tnt.write("ppp config " + CONNECTIONNAME + " up\\n")
time.sleep(WAITTIME)
tnt.read_until(PROMPT)
tnt.write("ppp config " + CONNECTIONNAME + " up\\n")
tnt.write("\\n")
tnt.read_until(PROMPT)
tnt.write("13\\n") # press option to exit
tnt.close()
下面重启路由器:
#!/usr/bin/env python# -*- coding: utf-8 -*-
import sys
import telnetlib
import re
import time
import sys
import os
HOST = "192.168.2.1"
password = "password"
class bcolors:
HEADER = '\\033[95m'
OKBLUE = '\\033[94m'
OKGREEN = '\\033[92m'
WARNING = '\\033[93m'
FAIL = '\\033[91m'
ENDC = '\\033[0m'
def disable(self):
self.HEADER = ''
self.OKBLUE = ''
self.OKGREEN = ''
self.WARNING = ''
self.FAIL = ''
self.ENDC = ''
def drukuj(wiadomosc):
sys.stdout.write("\\r")
sys.stdout.write(" ")
sys.stdout.flush()
sys.stdout.write("\\r")
sys.stdout.write(wiadomosc)
sys.stdout.flush()
#sys.stdout.write("\\r")
def status(komenda):
odb = ""
try:
tn = telnetlib.Telnet(host=HOST,timeout=23)
except IOError:
print "Nie nawiązano połączenia :(\\n"
else:
tn.read_until("Password: ")
tn.write(password + "\\n")
if komenda=="wan adsl reset\\n":
tn.write(komenda)
tn.write("exit\\n")
#print "Połączenie zostało z resetowane"
drukuj(bcolors.FAIL + "Połączenie zostało z resetowane" + bcolors.ENDC)
if komenda=="ip route status\\n":
tn.write(komenda)
tn.write("exit\\n")
odb = tn.read_all()
if komenda=="wan adsl status\\n":
tn.write("wan adsl status\\n")
tn.write("exit\\n")
odb = tn.read_all()
if re.search('current modem status: down', odb):
#print "Status: down"
drukuj(bcolors.HEADER + "Status: down" + bcolors.ENDC)
if re.search('current modem status: wait for initialization', odb):
#print "Status: wait for initialization"
drukuj(bcolors.WARNING + "Status: wait for initialization" + bcolors.ENDC)
if re.search('current modem status: initializing', odb):
#print "Status: initializing"
drukuj(bcolors.WARNING + "Status: initializing" + bcolors.ENDC)
if re.search('current modem status: up', odb):
#print "Status: up"
drukuj(bcolors.OKBLUE + "Status: up" + bcolors.ENDC)
return odb
def clear():
if os.name == "posix":
# Unix/Linux/MacOS/BSD/etc
os.system('clear')
elif os.name in ("nt", "dos", "ce"):
# DOS/Windows
os.system('CLS')
if __name__=="__main__":
clear()
status("wan adsl reset\\n")
time.sleep(5)
a = True
while a:
odb = status("ip route status\\n")
if re.search('\\d *poe0 *\\d', odb):
#print "Modem działa"
drukuj(bcolors.OKGREEN + "-=Modem działa=-\\n" + bcolors.ENDC)
time.sleep(2)
#clear()
a = False
else:
time.sleep(3)
status("wan adsl status\\n")
time.sleep(3)
下面通过telnet 来重启路由器
# -*- coding: utf-8 -*-
import telnetlib
HOST = "192.168.1.1"
USER = "root"
PASS = "admin"
router = telnetlib.Telnet(HOST)
router.read_until(": ", 2) # wait for timeout or "BusyBox on localhost login: "
router.write(USER + "\\n")
router.read_until(": ", 2) # wait for timeout or "Password: "
router.write(PASS + "\\n")
router.read_until("# ", 2) # wait for timeout or "# "
router.write("reboot\\n")
router.close()
print "Done!"
这是四段独立的代码!
我的路由器是普通的家庭版,不支持telnet的。
追答网页192.168.1.1总能登录上去,通过第一段代码登录网页总可以上的去的
参考技术A哈哈,你说的这个我也做过,给你段我写的代码
# -*- coding: utf-8 -*-# 重启路由器脚本
#
import urllib2, base64
# 192.168.1.1
# admin:admin (BASE64编码)
if __name__ == '__main__':
# 请求地址
url = 'http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=重启路由器'
# 验证的用户名和密码
login_user = 'admin'
login_pw = 'admin'
auth = 'Basic ' + base64.b64encode('admin:admin')
print auth
heads = 'Referer' : 'http://192.168.1.1/userRpm/SysRebootRpm.htm',
'Authorization' : auth
# 请求重启路由器
request = urllib2.Request(url, None, heads)
response = urllib2.urlopen(request)
print response.read()本回答被提问者采纳
如何用python轻松破解wif梦幻西游无双开服公告i密码
参考技术A 环境准备python2.7
凑合的linux
差不多的无线网卡
pywifi模块
弱口令字典
清除系统中的任何wifi连接记录(非常重要!!!)
首先,梦幻西游无双开服公告这个模块在win下有点鸡肋,作者在调用WLANAPI时没有做好WLAN_SECURITY_ATTRIBUTES的封装,所以推荐在linux下跑,我测试所使用的是Kali
2.0 自带python 2.7.6 ,可直接通过 pip install pywifi 安装。
导入模块
这里用的模块就这三个 pywifi的_wifiutil_linux.py脚本的 _send_cmd_to_wpas方法中的if reply != b'OKn':判断需要修改,不然会有很多的提示信息。
frompywifi import*
importtime
importsys 字典准备
效率很重要,毕竟这东西跑起来可真慢,下面是天朝用的比较多的wifi弱口令TOP10
以上是关于linux下的python里面如何用相关的网络模块来重启tp-link路由器?的主要内容,如果未能解决你的问题,请参考以下文章