Перейти до

Pipe через Perl


Рекомендованные сообщения

Добрый день!

Помогите пожалуйста разобраться, надо что бы скрипт на perl заносил в ipfw правила по ограничению скорости.. Сейчас это выглядит так:

    
system("/sbin/ipfw pipe 40001 config bw 64Kbits/s queue 20 >/dev/null mask dst-ip 0xffffffff"); # скорость на прием

system("/sbin/ipfw pipe 40002 config bw 64Kbits/s queue 20 mask src-ip 0xffffffff"); # скорость на отдачу

system("/sbin/ipfw add 40001 pipe 40001 ip from 10.0.0.2 to any in >/dev/null");

system("/sbin/ipfw add 40001 pipe 40002 ip from any to 10.0.0.2 out >/dev/null");

 

Вроде как оно все нормально добавляет.. ipfw show:

40001    0       0 pipe 40001 ip from 10.0.0.2 to any in
40001    0       0 pipe 40002 ip from any to 10.0.0.2 out

 

ipfw pipe show:


40001:  64.000 Kbit/s    0 ms   20 sl. 0 queues (64 buckets) droptail
40002:  64.000 Kbit/s    0 ms   20 sl. 0 queues (64 buckets) droptail

 

Но правила почему то не работают.. При чем если я их добавляю в файл с правилами или забиваю вручную то все отменно работает.

Не подскажет что это может быть?

Ссылка на сообщение
Поделиться на других сайтах
system("/sbin/ipfw pipe 40001 config bw 64Kbits/s queue 20 >/dev/null mask dst-ip 0xffffffff"); # скорость на прием

Что это? :)

Ты перепутал in, out местами в правилах и чего 2 правила с одном номером?

Пожалуй так будет правильно...

system("/sbin/ipfw pipe 40001 config bw 64Kbits/s queue 20 mask src-ip 0xffffffff >/dev/null");
system("/sbin/ipfw pipe 40002 config bw 64Kbits/s queue 20 mask dst-ip 0xffffffff >/dev/null");
system("/sbin/ipfw add 40001 pipe 40001 ip from 10.0.0.2 to any in >/dev/null");
system("/sbin/ipfw add 40002 pipe 40002 ip from any to 10.0.0.2 out >/dev/null");

Ссылка на сообщение
Поделиться на других сайтах
system("/sbin/ipfw pipe 40001 config bw 64Kbits/s queue 20 >/dev/null mask dst-ip 0xffffffff"); # скорость на прием

Что это? :)

Ты перепутал in, out местами в правилах и чего 2 правила с одном номером?

Пожалуй так будет правильно...

system("/sbin/ipfw pipe 40001 config bw 64Kbits/s queue 20 mask src-ip 0xffffffff >/dev/null");
system("/sbin/ipfw pipe 40002 config bw 64Kbits/s queue 20 mask dst-ip 0xffffffff >/dev/null");
system("/sbin/ipfw add 40001 pipe 40001 ip from 10.0.0.2 to any in >/dev/null");
system("/sbin/ipfw add 40002 pipe 40002 ip from any to 10.0.0.2 out >/dev/null");

Без толку..

Ссылка на сообщение
Поделиться на других сайтах
Я же говрю что ввожу все руками и все нормально работает...

Ну это вопрос не много меняет :)

А что в access логах Апача при этом???

не похоже что апач участвует здесь...

Ссылка на сообщение
Поделиться на других сайтах
  • 9 years later...

Добрый день!

Помогите пожалуйста разобраться, надо что бы скрипт на perl заносил в ipfw правила по ограничению скорости.. Сейчас это выглядит так:

   
system("/sbin/ipfw pipe 40001 config bw 64Kbits/s queue 20 >/dev/null mask dst-ip 0xffffffff"); # скорость на прием

system("/sbin/ipfw pipe 40002 config bw 64Kbits/s queue 20 mask src-ip 0xffffffff"); # скорость на отдачу

system("/sbin/ipfw add 40001 pipe 40001 ip from 10.0.0.2 to any in >/dev/null");

system("/sbin/ipfw add 40001 pipe 40002 ip from any to 10.0.0.2 out >/dev/null");

Вот и мне понадобилось из перл скрипта, что получает сведения от другого сервера данных, прописывать такое:

/sbin/ipfw table 2 add 192.168.30.0/24

ну или просто Ip клиента.

И соответственно чтоб мог удалять.

И вот бьюсь и не получается.

Даже локально запускаю скрипт и он не пишет в таблицу(не создает). Подставляю другие команды, например записать в файл сведения что получил скрипт, дату и прочее - пишет.

Подскажите, что не так сделал...

Сам скрипт вот такой:

# cat on.pl
#!/usr/local/bin/perl

print ("Content-type: text/html\n\n");
#print '<?xml version="1.0" encoding="windows-1251"?>';
#print("OK");

use strict;
use CGI ':standard';

my $date = localtime;
my $log = "/usr/scripts/on.log";
my $key = param('key');
my $kod = param('kod');
my $metka = 0;
my $IP = param('id');

if ($key eq "euflfk")   {
    if ($kod eq "vsem")         {
        if ($IP eq "my_ip")        {
        if (open(LOG, ">>$log"))        {
        print LOG "$date"."_"."OPEN"."_"."$IP"."_"."$kod"."\n";
        close(LOG);
        #print("OK-2"."\n");
        exec("/sbin/ipfw table 22 add 192.168.30.0/24 >/dev/null");
                                }
                                        }
                                }
                        }
#print("OK-3"."\n");

exit 0;

Ссылка на сообщение
Поделиться на других сайтах

Когда-то, в молодости, делал так:
 

$fwcmd = "/sbin/ipfw table " . $TABLE_N . " add $IP";
`$fwcmd`;
Відредаговано andryas
Ссылка на сообщение
Поделиться на других сайтах

 

Когда-то, в молодости, делал так:

$fwcmd = "/sbin/ipfw table " . $TABLE_N . " add $IP";

`$fwcmd`;

Точно также отрабатывает Ваш вариант.... Не создал он строку в таблице. А в логах апача это:

[Thu Jun 22 16:41:15.424213 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: ipfw: : /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.424511 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: socket: /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.424575 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: : : /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.443656 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: Operation not permitted: /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.450744 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: ipfw: : /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.450846 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: socket: /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.450905 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: : : /usr/local/www/apache24/cgi-bin/on.pl
[Thu Jun 22 16:41:15.451193 2017] [cgi:error] [pid 3074] [client 10.10.10.2:4589] AH01215: Operation not permitted: /usr/local/www/apache24/cgi-bin/on.pl

Ссылка на сообщение
Поделиться на других сайтах

 

 

Operation not permitted:

 

Напрямую с апача и не будет прав, и это хорошо.

Работайте через СУБД либо через временный файл. 

Ссылка на сообщение
Поделиться на других сайтах

Вот и пошел путем через временный файл плюс крон для шеловского скрипта....

А вот rscriptd от stargazera работает напрямую...но Очень уж мало передаваемых параметров.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...