使用 NetworkManager 搞定网页验证
学校基机房不知什么时候开始,上网要通过验证系统登陆。之前写了一个 bash 脚本执行登陆,但是每次开机后仍要手动运行,不方便。逛 Archlinux Wiki 的时候偶然看到了 NetworkManager 的 dispatcher 用法,就用此实现了自动登陆和登出。感谢 Hexchain 来稿
方法如下:
- 创建 passport 脚本
使用 Firebug 或 Chrome Inspector 抓出登陆时的 postdata,写出脚本(对不同的网络,登陆服务器和 postdata 不同。此处以我的网络环境为例):
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash
POSTLOGIN="username=hexchain&password=hexchain&password_enc=aGV4Y2hhaW4K&login=1&login_type=login&password_type=normal"
POSTLOGOUT="logout=1"
if [[ "$1" == "logout" ]]
then
wget -O- http://192.168.200.254:81/ --post-data=$POSTLOGOUT -T2 -t2
else
wget -O- http://192.168.200.254/ --post-data=$POSTLOGIN -T2 -t2
fi
|
由于这个验证系统十分
buggy,登陆后连接登陆页面将收不到任何回应,因此指定了 -T2
和 -t2
参数。
将以上内容保存在 /path/to/passport
-
创建 dispatcher:
!/bin/sh
INTERFACE=$1 STATUS=$2
case "$STATUS" in up) /bin/bash /path/to/passport login ;; down) /bin/bash /path/to/passport logout ;; esac
将以上内容保存为 /etc/NetworkManager/dispatcher.d/10_authenticate
(不同发行版文件位置可能不同,此处以 Arch 为例) 并设立 +x 属性。
最后,确保 NetworkManager 网络配置正确且自动启动。
参考资料:Arch Wiki
评论请前往作者博客原文,以便统一回复。