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


Answers:


5

多么有趣的问题。

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

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

sudo apt-get install python-mechanize

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

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,以使会话在打开连接时保持活动状态,但是从技术上来讲,没有理由为什么他们需要这样做。

然后,您只需要将其绑定到网络系统中,即可对其进行调用。从加载它/etc/network/if-up.d应该可以,但是我建议您在代码前面加上一个检查,以确保您确实在登录所针对的热点上。


太好了,我不知道机械化。我很高兴尝试一下。
ændrük

2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.