KBS的BBS系统灌水脚本
2009年12月07日
基本上,是写一个脚本,定好一系列步骤,并用输出管道传与 telnet 程序:
water.sh username passwd | telnet -8 forum.byr.edu.cn
这多亏了 telnet 的作者没有考虑周全,标准输入不从 /dev/tty 读,而是从 stdin 读。换成ssh就没折了。
这里面的Point是: KBS有很多状态,比如在看一篇文章时,是一个状态,这种状态下,它从客户接受输入,它判断输入的符号串,看是 数据 还是命令,比如你按 ^W 时,表示写好了你的文章,^W会使得客户端发送 027 (八进制)到服务器端,服务器读取后,发现是027,这是一个^W命令,而不是数据,就采取想应的操作。
关键是,怎么样表示 ^W 的效果? 首先你可以用getchar()得到^W的整数值,打印出来看看是什么,发现是027,然后用 echo 的 -e 参数: echo -e "\027" (见man),这就会将一个值为027的ASCII字节传过去。 另外,注意用 -n,因为KBS的很多都是raw模式的,按个键就响应的,所以,不必要输入回车。
我在xxx论坛测试成功,脚本如下:
#!/bin/sh
USERNAME="$1"
PASSWORD="$2"
sleep 2 #等待 telnet 启动完毕
echo "$USERNAME"
echo "$PASSWORD"
sleep 2 #等待验证通过,如果是繁忙的站点,这个值和下面各个sleep的值都要取大点。
# 下面三个在xxx站点上,跳过一系列需要按个键的地方,就是那种欢迎之类的,按下才跳过去。
echo
sleep 1
echo
sleep 1
echo
sleep 1
# 选择哪个讨论区
echo "S"
sleep 1
# 选择某个版面(是xx论坛的应该能看出来这是哪个版)
echo "nic"
sleep 1
########## below for a single reply with one cow ##########
echo
sleep 1
echo -n "R"
sleep 1
cowsay "惊现某某两个马甲..."
echo -n -e "\027"
sleep 1
echo "F"
sleep 1
exit 0
########## below for a single reply with many cows ##########
#echo
#sleep 1
#echo -n "R"
#sleep 1
#
#for file in `ls /usr/share/cows`
#do
# #cowsay -f $file "皮皮封我,好难过,bad,too bad"
# cowsay -f $file "小沛生日快乐,挖卡卡"
# echo
# echo
# echo
#done
#echo
#echo "自动灌水脚本哈,测试测试,这个可以用于良好目的的,比如自动更新帖子嘿嘿"
#echo -n -e "\027"
#sleep 1
#echo "F"
#sleep 1
#
#exit 0
########## below for replys‘ loop 用这个小心被封阿呵呵 ##########
#for file in `ls /usr/share/cows`
#do
# echo
# sleep 1
# echo -n "R"
# sleep 1
# echo
# sleep 1
# cowsay -f $file "小沛生日快乐,挖卡卡"
# echo -n -e "\027"
# sleep 1
# echo "F"
# sleep 1
#done
#exit 0
over,当然了,你可以定制成任意的操作,只要你知道达成一个结果的操作序列。
2009年12月07日
基本上,是写一个脚本,定好一系列步骤,并用输出管道传与 telnet 程序:
water.sh username passwd | telnet -8 forum.byr.edu.cn
这多亏了 telnet 的作者没有考虑周全,标准输入不从 /dev/tty 读,而是从 stdin 读。换成ssh就没折了。
这里面的Point是: KBS有很多状态,比如在看一篇文章时,是一个状态,这种状态下,它从客户接受输入,它判断输入的符号串,看是 数据 还是命令,比如你按 ^W 时,表示写好了你的文章,^W会使得客户端发送 027 (八进制)到服务器端,服务器读取后,发现是027,这是一个^W命令,而不是数据,就采取想应的操作。
关键是,怎么样表示 ^W 的效果? 首先你可以用getchar()得到^W的整数值,打印出来看看是什么,发现是027,然后用 echo 的 -e 参数: echo -e "\027" (见man),这就会将一个值为027的ASCII字节传过去。 另外,注意用 -n,因为KBS的很多都是raw模式的,按个键就响应的,所以,不必要输入回车。
我在xxx论坛测试成功,脚本如下:
#!/bin/sh
USERNAME="$1"
PASSWORD="$2"
sleep 2 #等待 telnet 启动完毕
echo "$USERNAME"
echo "$PASSWORD"
sleep 2 #等待验证通过,如果是繁忙的站点,这个值和下面各个sleep的值都要取大点。
# 下面三个在xxx站点上,跳过一系列需要按个键的地方,就是那种欢迎之类的,按下才跳过去。
echo
sleep 1
echo
sleep 1
echo
sleep 1
# 选择哪个讨论区
echo "S"
sleep 1
# 选择某个版面(是xx论坛的应该能看出来这是哪个版)
echo "nic"
sleep 1
########## below for a single reply with one cow ##########
echo
sleep 1
echo -n "R"
sleep 1
cowsay "惊现某某两个马甲..."
echo -n -e "\027"
sleep 1
echo "F"
sleep 1
exit 0
########## below for a single reply with many cows ##########
#echo
#sleep 1
#echo -n "R"
#sleep 1
#
#for file in `ls /usr/share/cows`
#do
# #cowsay -f $file "皮皮封我,好难过,bad,too bad"
# cowsay -f $file "小沛生日快乐,挖卡卡"
# echo
# echo
# echo
#done
#echo
#echo "自动灌水脚本哈,测试测试,这个可以用于良好目的的,比如自动更新帖子嘿嘿"
#echo -n -e "\027"
#sleep 1
#echo "F"
#sleep 1
#
#exit 0
########## below for replys‘ loop 用这个小心被封阿呵呵 ##########
#for file in `ls /usr/share/cows`
#do
# echo
# sleep 1
# echo -n "R"
# sleep 1
# echo
# sleep 1
# cowsay -f $file "小沛生日快乐,挖卡卡"
# echo -n -e "\027"
# sleep 1
# echo "F"
# sleep 1
#done
#exit 0
over,当然了,你可以定制成任意的操作,只要你知道达成一个结果的操作序列。