bwifi/bwifi.sh
2022-12-02 11:42:18 +08:00

63 lines
2.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# Change the following variable to your username and password for school network authorization.
username=1970111222
password=123123321
# Get authorizing location from 302 response header.
# Since sometimes the school network don't hijack DNS lookup query, and it may take such a long time
# during DNS lookup. So we use an IP address to bypass the DNS lookup. Any fixed IP address providing
# HTTP service can take place of the "119.29.29.29".
echo 'sending a http request...'
res_headers=$(curl --request GET --head --no-progress-meter http://119.29.29.29/)
echo 'response received'
# If authorizing is requested, school network will respond any HTTP (not HTTPS) request with an 302
# response and its "Server" field is "DrcomServer"
if ! grep "Server: DrcomServer" <<< $res_headers ; then
echo "didn't receive a response from DrcomServer, you may already be online."
exit 1
fi
auth_host=$(sed -n -E 's/Location: (.*)/\1/p' <<< $res_headers | tr -d '[:space:]')
auth_host="${auth_host}/a70.htm"
echo auth host: $auth_host
# known auth host: 10.1.206.13
# - 10.1.206.13
# - 192.168.211.3
# for wireless, which will be redirected to this location, a "@bistu" is required,
if [ "$auth_host" == *"10.1.206.13"* ] ; then
username="${username}@bistu"
fi
# Note that the encoding of response is gb2312, so we need to transcode
# before comparing the title to judge whether we succeed to login.
title=$(curl --no-progress-meter --include \
--data-urlencode "DDDDD=$username" \
--data-urlencode "upass=$password" \
--data-urlencode "R1=0" \
--data-urlencode "R2=" \
--data-urlencode "R3=0" \
--data-urlencode "R6=0" \
--data-urlencode "para=00" \
--data-urlencode "0MKKey=123456" \
--data-urlencode "buttonClicked=" \
--data-urlencode "redirect_url=" \
--data-urlencode "err_flag=" \
--data-urlencode "username=" \
--data-urlencode "password=" \
--data-urlencode "user=" \
--data-urlencode "cmd=" \
--data-urlencode "Login=" \
$auth_host | iconv --from-code=gb2312 --to-code=utf-8 | sed -n -E 's#<title>(.*)</title>#\1#p')
echo auth result page title: $title
if [ "$title" == "认证成功页" ] ; then
echo "auth result: success"
else
echo "auth result: failed"
fi