返回列表 回复 发帖

[转帖]一个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?$allowallow2;
}
}
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
返回列表