здраствуйте у моего провайдера есть прога(клиентская) которая управляет доступом в инет. есть версия под линукс и скрипт на perl, на сколько я знаю perl в нашем родном асусе есть (у меня 500г делюкс). вопрос как его туда запихнуть и как управлять его работой?
вот тект скрипта на перл:
#!/usr/bin/perl -w
#
#use strict;
use IO::Socket ();
use Digest::MD5 ();
use vars qw(%secret);
$| = 1;
my $PORT = 8899;
my $MIN_CHALLENGE_LENGTH = 32;
my $MAX_CHALLENGE_LENGTH = 64;
if ($#ARGV < 2 or ($ARGV[1] ne "1" and $ARGV[1] ne "2")) {
print "Usage: $0 password accesslevel gatewayaddress\n";
print " where access level is 1 or 2 -- internal and external traffic.\n";
die;
}
my $PASS = $ARGV[0];
my $ACCLEV = $ARGV[1];
my $GWADDR = $ARGV[2];
my $proto = "";
my $h = IO::Socket::INET->new('PeerAddr' => $GWADDR,
'PeerPort' => $PORT);
&read_handle(\$proto, 1);
if (ord($proto) == 2) { # redirect to real firewall
my $gw_len;
&read_handle(\$gw_len, 1);
$gw_len = ord($gw_len);
die "Invalid gateway address length $gw_len.\n" if $gw_len < 7 or $gw_len > 15;
&read_handle(\$GWADDR, $gw_len);
$h->close;
$h = IO::Socket::INET->new('PeerAddr' => $GWADDR,
'PeerPort' => $PORT);
&read_handle(\$proto, 1);
}
die "Access denied.\n" if ord($proto) == 0;
die "Invalid authentication protocol.\n" if ord($proto) != 1;
my $rin = "";
my $chal_len = "";
my $challenge = "";
my $result = "";
my $ctx = Digest::MD5->new;
my $sockhost = $h->sockhost();
# print "Run from $sockhost: ";
my $firsttime = 1;
while ($h->opened) {
$rin = "";
vec($rin, fileno($h), 1) = 1;
my $nf = select($rin, undef, undef, 0);
# print "nf: $nf\n";
last if $nf == 1;
&read_handle(\$chal_len, 1);
$chal_len = ord($chal_len);
die "Invalid challenge length $chal_len.\n"
if $chal_len < $MIN_CHALLENGE_LENGTH or $chal_len > $MAX_CHALLENGE_LENGTH;
&read_handle(\$challenge, $chal_len);
$ctx->new;
$ctx->add($challenge);
$ctx->add($sockhost);
$ctx->add($ACCLEV.$PASS);
my $ident = $ctx->digest;
syswrite($h, $ident, 16);
&read_handle(\$result, 1);
$result = ord($result);
if ($result == 1 or $result == 2) {
print "Ok!\n" if $firsttime;
} else {
die "Failed...\n" if $firsttime;
}
$firsttime = 0;
}
sub read_handle {
my($ref, $len) = @_;
die "Socket closed.\n" if !$h->opened;
my $recvlen = sysread($h, ${$ref}, $len);
die "Error reading socket.\n" if !defined($recvlen) or $recvlen != $len;
}