参考资料
完整代码
_user='B17060431'
_pass='password'
while true; do
POST_IP=$(ifconfig wlan0|grep inet|grep -v inet6|awk '{print $2}'|cut -d ':' -f2)
if ping -c 1 baidu.com >/dev/null 2>&1; then
echo OK!
sleep 30
else
echo Posting!
curl "http://p.njupt.edu.cn:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=p.njupt.edu.cn&iTermType=1&wlanuserip=${POST_IP}&wlanacip=10.255.252.150&wlanacname=XL-BRAS-SR8806-X&mac=00-00-00-00-00-00&ip=${POST_IP}&enAdvert=0&queryACIP=0&loginMethod=1" \
-H "Connection: keep-alive" \
-H "Pragma: no-cache" \
-H "Cache-Control: no-cache" \
-H "Origin: http://p.njupt.edu.cn" \
-H "Upgrade-Insecure-Requests: 1" \
-H "DNT: 1" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" \
-H "Referer: http://p.njupt.edu.cn/" \
-H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7,zh;q=0.6" \
-H "Cookie: program=2; vlan=0; ssid=null; areaID=null; md5_login2=%2C0%2C${_user}@njxy%7C${_pass}; PHPSESSID=253ga1php85a3tevfgjrua9d36; ip=${POST_IP}" \
--data-raw "DDDDD=%2C0%2C${_user}%40njxy&upass=${_pass}&R1=0&R2=0&R3=0&R6=0¶=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=&v6ip="
sleep 1
fi
done
修改代码
1.填写用户名和密码
_user='B17060431'
_pass='password'
2.验证ifconfig可用
在终端中运行下面的代码,将 wlan0 替换成你使用的网络接口,例如en0,eth0.2等等,可以使用ifconfig命令查看你获取到ip的网络接口。
ifconfig wlan0|grep inet|grep -v inet6|awk '{print $2}'|cut -d ':' -f2)
命令说明
ifconfig 输出网络接口状态
eth0 Link encap:Ethernet HWaddr 00:0F:20:CF:8B:42
inet addr:217.149.127.10 Bcast:217.149.127.63 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2472694671 errors:1 dropped:0 overruns:0 frame:0
TX packets:44641779 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1761467179 (1679.7 Mb) TX bytes:2870928587 (2737.9 Mb)
Interrupt:28
其中有一个是你正在使用的接口,inet addr:217.149.127.10,中的IP地址就是我们需要获得的POST_IP。
wlan0 网络接口
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether 11:ed:3c:22:b9:33
inet6 fe80::18fc:c937:3a34:a987%en0 prefixlen 64 secured scopeid 0xb
inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
grep inet 获取inet信息(会包括inet6)
inet6 fe80::18fc:c937:3a34:a987%en0 prefixlen 64 secured scopeid 0xb
inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.104.255
grep -v inet6 排除inet6
inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.104.255
awk ‘{print $2}’ 输出第二个词组
192.168.1.101
部分系统,例如openwrt 会输出
addr:192.168.1.101
因此再加上下面这个规则,输出冒号后面的内容
cut -d ':' -f2
最终完整的ifconfig命令会输出主机获取到的ip地址,校园网的ip是10开头的,例如:10.164.123.123
修改curl 部分
- 使用 Chrome 的开发者工具来抓取请求:Chrome浏览器打开任意一个网站,跳转到认证页面之后,右键->检查,打开开发者工具, 选择 network,勾选 Preserve log.
- 在登录页面填写帐号密码信息,点击登录, 即可看到相关的 HTTP 请求,找到 Request Method 为 POST 的那个,右键->Copy-> Copy as cURL,即可得到认证所需的 curl 命令.使用该命令即可进行登录认证,无需在打开网页之后跳转到认证页面进行网页认证了.而 curl 支持多个平台的。
- 将复制到的 cURL 粘贴到任意文本编辑器中,以待进一步的处理。
- 对照源代码进行修改。
重点替换${POST_IP},${_user},${_pass},其余部分可以保持和获取的curl一致。
curl "http://p.njupt.edu.cn:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=p.njupt.edu.cn&iTermType=1&wlanuserip=${POST_IP}&wlanacip=10.255.252.150&wlanacname=XL-BRAS-SR8806-X&mac=00-00-00-00-00-00&ip=${POST_IP}&enAdvert=0&queryACIP=0&loginMethod=1" \
-H "Cookie: program=2; vlan=0; ssid=null; areaID=null; md5_login2=%2C0%2C${_user}@njxy%7C${_pass}; PHPSESSID=253ga1php85a3tevfgjrua9d36; ip=${POST_IP}" \
--data-raw "DDDDD=%2C0%2C${_user}%40njxy&upass=${_pass}&R1=0&R2=0&R3=0&R6=0¶=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=&v6ip="
注意:如果你的密码中有标点符号等,可能会有转变,例如英文逗号会用%2C替代,具体看获取的curl 中对应内容。
注意:sleep 5,和sleep 5s在openwrt上都可以运行,但是在mac上只能用sleep 5,请单独测试。