荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (prepare for the future), 信区: InstallBBS
标  题: 对抗上站机的一个程序
发信站: 荔园晨风BBS站 (Sat Jan 12 23:45:46 2002), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: Lotus.bbs@bbs.hhu.edu.cn (海纳百川☆有容乃大), 信区: BBSMan_Dev
标  题: 对抗上站机的一个程序
发信站: 水上明珠 (Wed Jan  2 17:56:31 2002)
转信站: SMTH!thunews.dhs.org!HHUBBS

多占用系统的IO和硬盘资源,限制用户每天发文文章数,应该修改一下就
可以用了。以下代码在水上明珠上测试。

1、main.c中函数,找到相应位置,
#ifdef CHECK_LESS180SEC
           if (abs(time(0)-currentuser.lastlogout)<180&&!HAS_PERM(PERM_SYSOP) &
&
                strcasecmp(currentuser.userid, "guest") != 0) {
                int tmpnum,tmpnum1;
                tmpnum = login_limit();
                if (tmpnum==0) //一天60次
                {
                   log_login_limit();
                   prints("\n对不起,您使用了上站机,一天登入超过了60次!您不能

 入本站\n");
                   prints("若有疑问请通知站务人员, 谢谢.\n");
                   oflush();
                   sleep(3);
                   exit(1);
                }
                        srandom(time(0));
                        tmpnum = random() % 9;
                prints("您在 3 分钟 内重复上站.请按 ^[[1;36m%d^[[m 键确认您的身

? ",tmpnum);
                genbuf[0] = igetkey();
                if isalnum(genbuf[0])
                   tmpnum1 = atoi(genbuf);
                        else
                   tmpnum1 = tmpnum+1;
                if ( tmpnum1 != tmpnum ) {
                   prints("\n对不起,您并没有按下 %d 键!您不能进入本站\n",tmpn

u
m);
                   prints("若有疑问请通知站务人员, 谢谢.\n");
                   oflush();
                   sleep(3);
                   exit(1);
                }
                prints("\n");
            }
#endif
2、在main.c中加上login_limit()函数和log_login_limit()函数
// Lotus Add 2001.5.18
int login_limit()
{
    FILE *fp;
    char buf[100];
    int num=0;
    struct tm *now;
    time_t t;
    t = time(0);
    now = localtime( &t );
    buf[0]='\0';
    sprintf(buf,"home/%c/%s/%04d%02d%02d.login",toupper(currentuser.userid[0]),

currentuser.userid,now->tm_year+1900,now->tm_mon+1,now->tm_mday );
    if ( !dashf(buf) )
           num = 0; //每天第一篇,自动清记录器从0开始
    else if((fp=fopen(buf,"r"))!=NULL)
    {
        fscanf(fp,"%d",&num);
            fclose(fp);
    }
    if (num<0) num=0;
    if (num>60)
        return 0; //1天最多60次 不允许
    else
        num++;
    if((fp=fopen(buf,"w"))!=NULL)
    {
        fprintf(fp,"%d",num);
        fclose(fp);
    }
    return num;
}
void
log_login_limit() {
        FILE *fp;
        time_t t;
        t = time(0);
        fp=fopen("reclog/limit.login", "a");
        fprintf(fp, "%24.24s from:%s \n", ctime(&t),currentuser.userid);
        fclose(fp);
}


--
                                        Lotus

※ 来源:·水上明珠 bbs.hhu.edu.cn·[FROM: 202.119.118.27]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店