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

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

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

答案1

真是一个有趣的问题。

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

我建议你玩一下Python 的 Mechanize 库。您可以通过以下方式从存储库安装:

sudo apt-get install python-mechanize

然后开始编写脚本。您需要首先找出要提交的页面的结构。您需要找到表单来自哪里以及需要输入哪些字段才能提交。一旦您知道了这些,它实际上就像编写一个快速的小型表单解析器和提交器一样简单。Mechanize 会完成所有繁重的工作。这是一个改编自他们的表格文档

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()

根据他们的系统如何工作,这可能就足够了。您可能需要使用一些 cookie jarring 来在他们打开连接时保持会话处于活动状态,但从技术上讲,他们为什么需要这样做没有任何争议。

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

答案2

根据所采用的强制门户类型,您可能能够通过使用 Wget 发送的 POST 请求进行身份验证(使用篡改数据了解需要发送哪些数据)或使用Firefox 中的脚本。

您可以添加一个脚本,使其/etc/network/if-up.d在每次建立网络连接时运行。iwconfig在执行任何操作之前,让脚本验证您所使用的网络,并确保使用启动命令,sudo -u yourusername这样您就不会以 root 身份运行 Web 浏览器。

相关内容