呵呵...想法不错,不过现在不需要这个功能了
下面看一下这段代码吧
bbsrf.c
int
check_ban_site(char *name)
{
FILE *list;
char buf[40], *ptr;
if (list = fopen(BAD_HOST, "r")) {
while (fgets(buf, 40, list)) {
ptr = strtok(buf, " \n\t\r");
if (ptr != NULL && *ptr != '#'){
if(!strcmp(ptr, name)){
fclose(list);
return 1;
}
//如果登陆ip在被禁列表里,则ban掉(返回值1)
if(ptr[0] == '#')continue;
//如果被禁列表的一行用#开头则跳过
//说明#起注释的作用
if(ptr[0] == '-' && !strcmp(name,&ptr[1])){
fclose(list);
return 0;
}
//如果被禁列表有一行以'-'开头,则拿'-'后面的部分和登陆ip比较
//相同则容许进入
//说明'-'开头起放入的作用
if(ptr[strlen(ptr)-1]=='.'&&!strncmp(ptr,name,strlen(ptr)-1)){
fclose(list);
return 1;
}
//如果被禁列表ip以'.'结尾,则只拿被禁列表的这个不完全ip的长度和登陆ip比较
//前面部分相同,则ban掉
//这一段的作用是让类似10.10.这样的设定何以ban掉整个b段
if(ptr[0]=='.'&&strlen(ptr)<strlen(name)&&
!strcmp(ptr,name+strlen(name)-strlen(ptr))){
fclose(list);
return 1;
}
//如果被禁列表以'.'开头,且被禁列表ip长度比登入ip短
//则只比较后面的部分,相同则ban掉
//则是对类似.10.10这样的最后部分的限定
}
}
fclose(list);
}
return 0;
如果都不符合,则让它通过
}
这段函数还是写得蛮紧凑的
唯一的缺点就是缺少对以'-'开头又以'.'结尾的ip的判断
在不做大变动的同时
加上一句这样的判断语句
再make clean update
就可以很简单地用
-10.1.1.
-10.1.2.
10.
这样的ip禁止登陆设定完成对内网的ip限定,使得只允许10.10.1/2.*两个c段进入
这是我一个比较保险的分析
【 在 chutium (阿新) 的大作中提到: 】
: 貌似改成 !bad_host(fromhost) 就ok了,那位试试?说说灵不灵?
--
修改:blkf FROM 202.120.224.*
FROM 202.120.224.*