#!/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 ! echo -n "$res_headers" | grep "Server: DrcomServer" ; 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" declare -a cookie_opt declare -a header_opt cookie_opt+=("--cookie" "program=beijing-information") cookie_opt+=("--cookie" "md5_login2=$username|$password") header_opt+=("--header" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8") header_opt+=("--header" "Accept-Language: en-US,zh-CN;q=0.5") header_opt+=("--header" "Accept-Encoding: gzip, deflate") header_opt+=("--header" "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0") 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=" \ "${cookie_opt[@]}" \ "${header_opt[@]}" \ $auth_host | iconv --from-code=gb2312 --to-code=utf-8 | sed -n -E 's#