62 lines
2.2 KiB
Bash
Executable file
62 lines
2.2 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
|
|
|
|
# form data
|
|
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
|
|
|