| 
 UID2033152 威望1 点 金钱3090 金币 点卡0 点 
 | 
1#
 发表于 2003-9-3 18:18 
 | 只看该作者 
 [转帖]一个bbs telnet proxy
| 需要创建一个bbs用户,密码为空(用root passwd bbs ,连续回车) 将它的shell改为bbs.pl,需要路径
 
 在multi.txt中存储允许多个用户的IP,每行一个:IP正则表达式::允许数目
 例:
 166\.111\.::2
 \.edu\.cn::3
 没有::的行都可以作为注释
 
 在banned.txt中可以存储禁止穿梭的用户,每行一个正则表达式
 例:(禁止教育网)
 166\.111
 162\.105
 202\.20\d
 \.edu\.cn
 
 banned.txt优先权大于multi.txt,如果一个IP符合多个multi.txt的条件,选择最多的
 
 !!!!!如果正则表达式有误,程序会出错的,我觉得没必要用eval,方便大家查错!!!
 
 在welcome.txt中存放欢迎信息
 在deny.txt存放对被拒绝的用户的解释
 具体服务还需要修改程序
 
 主文件
 bbs.pl
 #START
 #!/usr/local/bin/perl
 use strict;
 ############## GET IP ####################
 my $result = "";
 my @temp = ();
 my $thisip = "";
 $result = `last -n 1 bbs`;
 @temp=split("\n", $result);
 @temp = split(" ", shift @temp);
 $thisip = $temp[2];
 $result=`finger | grep bbs`;
 @temp=split("\n",$result);
 my $online={};
 my $flag=0;
 #############  GET USER #####################
 foreach $result(@temp)
 {
 next if $result!~m{\w*\s*(\d*)\s*(\d*)
  \d*) \((.*)\)}; $online->{$4}++;
 }
 ############## RESTRICT #####################
 open(FH,'multi.txt');
 my $allow=1;
 my $line=undef;
 while($line=<FH>)
 {
 chomp($line);
 my ($rexp,$allow2)=split('::',$line);
 next if !$allow2;
 if($thisip=~m{$rexp})
 {
 #print "DEBUG: $allow $allow2";
 $allow=$allow>$allow2?$allow
  allow2; }
 }
 if($online->{$thisip}>$allow || scalar(keys %$online)>=12)
 {
 print "    这台机器还有其它的用途,资源有限。所以最多只允许12人在线。一个IP
 只允许\n一个用户在线,如果你们通过一台机器,与星星bbs论坛的magic联系。
 \n";
 exit;
 }
 open(FH,'banned.txt');
 while($line=<FH>)
 {
 chomp($line);
 if($thisip=~m{$line})
 {
 print "$thisip 是不受欢迎的用户,对不起。\n";
 exec('cat deny.txt') if (-e 'deny.txt');
 exit;
 }
 }
 ############## MAIN     #####################
 print "欢迎你,来自",$thisip," [$online->{$thisip}/$allow] 的朋友 \n";
 for(1...5)
 {
 system('cat welcome.txt') if (-e 'welcome.txt');
 my $choice=<STDIN>;
 chomp($choice);
 chomp($choice);
 if($choice==1)
 {
 exec('telnet smth.org');
 exit;
 }
 elsif($choice==2)
 {
 system('finger | grep bbs');
 }
 elsif($choice==3)
 {
 print "\n谢谢使用,再见。";
 exit;
 }
 else
 {
 print "\n无效输入\n";
 }
 }
 print "\n谢谢使用,再见。";
 
 #END
 | 
 |