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

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

多么有趣的问题。

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

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

sudo apt-get install python-mechanize 

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

 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加载它应该可以工作,但我建议你在代码前加上一个检查,以确保你真正在你的登录工作的热点上。

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

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