【网络】南邮校园网自动登陆脚本

参考资料

源项目地址

我的项目地址

完整代码

_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&para=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&para=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=&v6ip="

注意:如果你的密码中有标点符号等,可能会有转变,例如英文逗号会用%2C替代,具体看获取的curl 中对应内容。

注意:sleep 5,和sleep 5s在openwrt上都可以运行,但是在mac上只能用sleep 5,请单独测试。

分类: