我有 TP 链接路由器(WR841N)。我想登录到我的 TP 链接路由器,需要更改主要和次要 DNSusing 脚本。
我试图使用下面的脚本登录,但没有成功:
import urllib2
import urllib
import cookielib
def main():
userName = 'admin'
pcPword = 'admin'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'userName' : userName, 'pcPword' : pcPword})
resp = opener.open('http://192.168.0.1/userRpm/LoginRpm.htm', login_data)
print(resp.read())
if __name__ == '__main__':
main()
然后如何使用脚本更改主要和次要 dns。
CookieProcessor 显然没有设置 POST 头。您需要设置 Content-Type 和 Content-Length 以匹配您的 login_data。
我建议您使用 urllib2.install_opener()安装您构建的 opener,然后使用 request:
r = urllib2.Request('http://192.168.0.1/userRpm/LoginRpm.htm')
r.add_header("Content-Type", "application/x-www-form-urlencoded")
r.add_header("Content-Length", str(len(login_data)))
r.add_data(login_data)
u = urllib2.urlopen(r)
print u.read()
u.close()
然后你必须继续填写所有其他表格来改变你想要的。
如果 cookies 不是由 javascript 管理的,你将能够做到。如果他们是,也许即使你仔细检查代码并从 javascript 代码中手动提取 cookie 结果。我以前做过。
但是,是的,SSH 或 telnet 或 rlogin 会比 HTTP 更容易。要继续使用 HTTP,请查看 Requests 包,它可能会有所帮助,并使您的代码更小。它包括为您管理会话。
如果登录表单将 enctype 属性设置为其他属性(纯文本或多部分),则将 urlencoded 类型添加到 content-type 可能无济于事。
我不认为这是一个案例,但如果是这样,你仍然可以做更多的工作。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(45条)