Perl обработка команд приложением(консоль)

  • Автор темы sint
  • Дата начала
S

sint

#1
Доброго времени суток! Подскажите плиз как прописать в программе обработку команд?
Ситуация такая:
ОС Linux Runtu 3 ...
В моей сетке 4 компа, без домена: просто рабочая группа. Доступ в инет есть только на одном (на моём) )
и мне надо раздать доступ в нет для остальных 3х. Пробовал настроить squid-2.6.STABLE22, но не сумел,,,
Недавно нашел в нете код прокси-сервера на Perl,
вот он:
#!/usr/bin/perl -Tw

use HTTP::Daemon;
use HTTP::Response;
use LWP::UserAgent;
use Compress::Zlib;
use CGI::Carp qw(fatalsToBrowser);

#Для автозаполнения форм и для записи запросов и ответов создадим лог файл PH
open(PH, ">>", "log.txt") or die "can't open 'log.txt': $!";

# Ниже список расширений (типов) файлов, которые мы не сжимаем
my @ext = qw(x-gtar x-gzip x-tar zip image zip z gz tz taz tgz lzh arj arc tar cab wmz yfs wsz exe uu xxe bhx b64 hqx mim);

#Список базовых url блокируемых ресурсов через пробел, например (все данные условны):

my @ext_url = qw(reklame.skazhem.net zloi-virus.com banner.von.ru tormoz.stat.ru);

#Наш ответ ненужным данным:

$block = HTTP::Response->new( "204", "No Content" );

# Номер порта нашего сервера, его мы указываем в настройках домашнего браузера
my $port = 8080;

# Если браузер внезапно отключится
$SIG{PIPE} = 'IGNORE';

# Создаем объект сервера
my $server = HTTP::Daemon->new( LocalPort => $port ) or
die "Can't start server ($@)" unless defined $server;

# Создаем объект удаленного (серверного) браузера
my $ua = LWP::UserAgent->new;

# Ждем подключения нашего (домашнего) браузера
while (my $conn = $server->accept) {

# Дождавшись, получаем объект запроса в $request (вот тут мы его можем менять)
while (my $request = $conn->get_request) {
$conn->autoflush;

#Проверим url запрашиваемого ресурса на совпадение со списком блокировки:
if (grep { $request->uri =~ /\Q$_/g } @ext_url) {

#И в случае совпадения пошлем свой ответ "домашнему" браузеру:
$conn->send_response($block);
next;
}

# Например "сменим" браузер
$request->header(User_Agent => 'SuperPuper/v.9.14 Platinum');

# Перечислим все данные, которые мы можем получать, кроме flash (теперь нам flash не передадут)

$request->header(Accept =>
"text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1");

# Посылаем запрос через серверный браузер и получаем объект ответа в $resp
my $resp = $ua->simple_request($request);

# В переменной $c_cont содержание (данные) ответа
my $c_cont = $resp->content;

# Проверяем необходимость сжатия, если сжатие не нужно, тут же отправляем на домашний браузер
if ( $resp->content_encoding || (grep { $_ =~ /$resp->content_type/g } @ext) || length($c_cont) < 3000 ) {
$conn->send_response($resp);
}
else {
# Сжимаем данные
$c_cont_zip = Compress::Zlib::memGzip($c_cont);

# Устанавливаем сжатые данные в объект ответа
$resp->content($c_cont_zip);

# Устанавливаем признак сжатия в объект ответа
$resp->content_encoding('gzip');

# Посылаем ответ домашнему браузеру
$conn->send_response($resp);
}
}
print STDERR "Close: ", $conn->reason, "\n";
$conn->close;
undef $conn;
}

#Для автозаполнения форм и для записи запросов и ответов в лог файл PH
print PH $request->as_string, "\n";
print PH $resp->as_string, "\n";
Теперь проблема: Как закрыть запущенный скрипт?
На первых же этапах настройки я его запустил и закрыл консоль,,,
Хочу вписать в скрипт хук на нажатие комбинации допустим "ctrl+shift+s", подскажите как?

Заранее благодарен!