免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 842 | 回复: 0
打印 上一主题 下一主题

写了一个drcom-client 4 Linux自动登录脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-06 01:34 |只看该作者 |倒序浏览

因为学校的校园网用DrCOM进行认证,当在Linux下工作时,上网很不方便,主要的原因是帐号是共用的,经常会碰到想用帐号的时候别人在用。在
Windows下,这不是什么大问题,可以让登录程序自己尝试自动登录。可是,用于Linux的drcom-client并没有提供这项功能。那怎么办
呢,我打算写一个bash脚本来凑合着对付这个问题,于是就有了本文要给出的这个东西。我的bash编程经验等于x趋近于0时sin(x)的值,所以脚本
写得很烂,看不过眼也只能将就了。
鉴于DrCOM在教育网内广泛使用,那么,这个脚本应该是适用于那些需要在Linux下通过DrCOM认证上网的童鞋的。要使用此脚本,你需要已经
安装好了drcom-client,如果你还没有这么做,那么你可以去这里下载:http:
//sourceforge.net/projects/drcom-client
并且还要已经配置好了/etc/drcom.conf,具体的配置参数见drcom-client的文档。
我写的这个脚本叫drcomcbot.sh,脚本本身接受一个可选参数:重试次数,默认的重试次数为0,也就是无限次重试。每次尝试之后脚本会“休息”一秒钟,然后再次尝试登录。如此循环往复,直到登录成功或者你失去耐心CTRL-C为止^_^
懒得传附件了,直接把脚本源代码贴上来了事:
#! /bin/sh
usage="
\n
try to login DrCOM repeatly\n
\n
you should have already installed drcom-1.3.7, if you haven't,\n
you can get latest drcom-client for linux from sourceforge.\n
\n
the only argument you can provide is how many times to retry \n
before giving up. e.g, if you wanna try 10 times, then you \n
should input as follows:\n
    ./drcomc.sh 10\n
\n
if retry is 0, then this script will try to login infinitely.\n
default retry is 0.\n
\n
Rockins Chen \n
Mon Apr  6 00:12:07 CST 2009\n"
#==================================================================
# REPEAT can be changed by command line argument
REPEAT=0
if [[ $# == 1 ]]
then
    REPEAT=$1;
fi
#==================================================================
# following parameters should *NOT* be changed
SUCCEED="no"
LOG="./drcomc.log"
function check_login_status()
{
    exp='/^Login\W\w+$/{print $2;}';
    login_result=`awk "$exp" drcomc.log`;
    #echo "CHECK:$login_result";
    if [[ $login_result == "failed" ]]
    then
        SUCCEED="no";
    elif [[ $login_result == "succeeded" ]]
    then
        SUCCEED="yes";
    fi
}
function info()
{
    echo -e $usage;
}
function mainloop()
{
    # clear log
    echo -n -e > $LOG
    touch $LOG
    # print prompts
    info;
    echo "try login to DrCOM...";
    if [[ $REPEAT == 0 ]]
    then
        RETRY="*INFINITE*";
    else
        RETRY=$REPEAT;
    fi
    echo -e "retry $RETRY times\n\n";
    # loop for ever ?
    loopforever=0;
    if [[ $REPEAT == 0 ]]
    then
        loopforever=1;
    fi
    for (( i=0; i  $REPEAT || $loopforever ; ))
    do
        drcomc login 2>&1 > $LOG;
        check_login_status;
        if [[ $SUCCEED == "yes" ]]
        then
            echo "drcom login success";
            break
        else
            echo "faild, try again...";
        fi
        sleep 1s;
        if [[ !$loopforever ]]
        then
            let i++
        fi
    done
    unlink $LOG
}
mainloop;


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/270/showart_1890859.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP