如何以编程方式登录热点类型的网络?

Vad*_*kin 8 network-manager wireless networking

我经常连接到一个开放的网络,但在网页中使用之前需要通过密钥验证。是否可以使用脚本自动进行身份验证?

Oli*_*Oli 5

多么有趣的问题。

虽然我确信 ændrük 的答案可能会奏效,但我对让依赖于桌面软件的东西管理网络可用性略有不利。

我建议您使用Python 的 Mechanize 库。您可以通过以下方式从存储库安装它:

sudo apt-get install python-mechanize
Run Code Online (Sandbox Code Playgroud)

然后获取脚本。您需要首先找出您提交到的页面的结构。您需要找到表单的来源以及需要输入哪些字段才能提交。一旦你知道这一点,它真的就像编写一个快速的小表单解析器和提交器一样简单。机械化完成所有繁重的工作。这是一个改编自他们关于表单的文档的快速示例:

import sys
from mechanize import ParseResponse, urlopen, urljoin

# replace this with the actual login page
# you'll need to do some research
uri = "http://theloginpage.com/"

response = urlopen(uri)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form
form["username"] = "your username"
form["username"] = "password"

# form.click() returns a mechanize.Request object
# (see HTMLForm.click.__doc__ if you want to use only the forms support, and
# not the rest of mechanize)
print urlopen(form.click()).read()
Run Code Online (Sandbox Code Playgroud)

根据他们系统的工作方式,这可能就足够了。您可能需要加入一些 cookie 干扰以在他们打开连接时保持会话处于活动状态,但从技术上讲,没有争论为什么他们应该要求这样做。

然后你只需要把它绑定到网络系统中,这样它就会被调用。从它加载它/etc/network/if-up.d应该可以工作,但我建议你在代码前加上一个检查,以确保你真的在你的登录所适用的热点上。