|
#!/bin/bash |
|
|
|
# |
|
# |
|
# [email protected] |
|
# |
|
# |
|
|
|
USER=$1 |
|
PASS=$2 |
|
|
|
MAX_FAIL_TO_ALLRAND_TIME=5 |
|
MAX_TRY_TIME=10 |
|
DING_URL='http://bjdc.taobao.ali.com/' |
|
|
|
if [ -e $HOME/.fasteatrc ];then |
|
. $HOME/.fasteatrc |
|
fi |
|
|
|
if [ "x$USER" == "x" ] || [ "x$PASS" == "x" ];then |
|
echo "Usage: $0 USERNAME PASSWORD" |
|
exit; |
|
fi |
|
|
|
|
|
COOKIE=`mktemp --suffix=.FASTEAT_COOKIE` |
|
|
|
cleanup(){ |
|
rm -f $COOKIE |
|
} |
|
|
|
|
|
declare -a RESULT |
|
declare -a ALLRESULT |
|
|
|
while read -r c; do |
|
c=`echo $c | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g' | xargs echo -e` |
|
blocked=0 |
|
|
|
for b in $BLACK_WORDS; do |
|
found=`echo $c | grep -v $b` |
|
if [ -z "$found" ];then |
|
blocked=1 |
|
echo "keyword $b blocked" |
|
fi |
|
done |
|
|
|
url=`echo $c | grep '/dingcan/\d+' -Po` |
|
if [ $blocked == 0 ];then |
|
RESULT[${#RESULT[*]}]="$url" |
|
fi |
|
ALLRESULT[${#ALLRESULT[*]}]="$url" |
|
|
|
done< <(curl -s "$DING_URL" |grep '<a.* href="/dingcan/\d+".*<\/a>' -Po) |
|
|
|
if [ ${#RESULT[*]} == 0 ];then |
|
echo "WARN: blocked all, failover to all random mode" |
|
RESULT=(${ALLRESULT[*]}) |
|
fi |
|
|
|
dingcan(){ |
|
if [ $1 -gt $MAX_FAIL_TO_ALLRAND_TIME ];then |
|
echo "WARN: failed more than $MAX_FAIL_TO_ALLRAND_TIME times, failover to all random mode" |
|
RESULT=(${ALLRESULT[*]}) |
|
fi |
|
|
|
i=${#RESULT[*]} |
|
selected=$(($RANDOM % $i)) |
|
DISH=${RESULT[$selected]} |
|
echo "Selecting $DING_URL/$DISH" |
|
|
|
t=`curl $DING_URL/$DISH -b $COOKIE -I 2>/dev/null | head -1 | cut -f 2 -d ' '` |
|
if [ "$t" == "403" ];then |
|
echo $USER " Login Failed" |
|
cleanup |
|
exit; |
|
fi |
|
} |
|
|
|
|
|
curl -d "name=$USER&pass=$PASS&form_id=user_login_block" $DING_URL -c $COOKIE 1>/dev/null 2>&1 |
|
|
|
for i in `seq $MAX_TRY_TIME`; do |
|
dingcan $i |
|
t=`curl $DING_URL -b $COOKIE 2>/dev/null | grep cancel` |
|
if [ "x$t" == "x" ];then |
|
echo "Try $i time waiting 1s"; |
|
sleep 1 |
|
else |
|
echo $USER " EAT SUCCESS" |
|
break; |
|
fi |
|
done |
|
cleanup |