The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Получить первое значение, !*! Happy_demon, 28-Апр-06, 11:05  [смотреть все]
Трям!
Преамбула. пытаюсь настроить mpd. для этого динамически в ipfw надо добавить правило вида

ipfw add $rule_namber[0] allow ip ftom any to $user_ip via $user_if

это строчка из скрипта, который я нашел здесь. все работает, кроме переменной $user_if. я ее хочу получить примерно таким образом
ifconfig | grep ng | grep 1500 -n | awk 'FS=":" {print $1}'
ну в общем понятно запускаю айфиконфиг, ищу интерфейсы ng если интерфейс не занят, то у него mtu равно 1500, греп нумерует найденные строки и вот теперь я хочу чтобы переменная $user_if была бы равна ng[номер_первой_найденной_строки - 1]. не подскажете- как мне это значение получить? заранее спасибо.

  • Получить первое значение, !*! chip, 11:32 , 28-Апр-06 (1)
    >Трям!
    >Преамбула. пытаюсь настроить mpd. для этого динамически в ipfw надо добавить правило
    >вида
    >
    >ipfw add $rule_namber[0] allow ip ftom any to $user_ip via $user_if
    >
    >это строчка из скрипта, который я нашел здесь. все работает, кроме переменной
    >$user_if. я ее хочу получить примерно таким образом
    >ifconfig | grep ng | grep 1500 -n | awk 'FS=":" {print
    >$1}'
    >ну в общем понятно запускаю айфиконфиг, ищу интерфейсы ng если интерфейс не
    >занят, то у него mtu равно 1500, греп нумерует найденные строки
    >и вот теперь я хочу чтобы переменная $user_if была бы равна
    >ng[номер_первой_найденной_строки - 1]. не подскажете- как мне это значение получить? заранее
    >спасибо.

    А зачем их еще нумеровать?! Насколько я понял, вы хотите получить "первый" свободный negraph интерфейс. Почему просто не воспользоваться:

    user_if=`ifconfig | grep -E '^ng.*1500' | awk -F: '{ print $1 }'`

    • Получить первое значение, !*! Happy_demon, 12:07 , 28-Апр-06 (2)
      Спасибо! вот уже почти. если приведенную строчку запускать из консоли- действительно получается то что надо. но т.к. у меня скрипт на перле, то он выдает либо все 4 строчки

      #!/usr/bin/perl -w
      $user_if=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
      print "$user_if\n";

      в этом случае, либо целиком одну строку в случае

      #!/usr/bin/perl -w
      @user_if=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
      print "@user_if[0]\n";

      но это уже мелочи- счаз разберусь.
      еще раз огромное спасибо!

      • Получить первое значение, !*! Happy_demon, 12:19 , 28-Апр-06 (3)
        #!/usr/bin/perl
        @a=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
        $user_if=substr (@a[0],0,3);
        print "$user_if\n";

        вот теперь совсем хорошо. еще раз спасибо.

        • Получить первое значение, !*! Happy_demon, 14:37 , 28-Апр-06 (4)
          все хорошо работает, пока это запускается из отдельного скрипта, как вставляю в рабочий скрипт - он начинает другое значение.
          #!/usr/bin/perl
          use strict;
          $|=1;
          my $username = $ARGV[4];
          my @rule_numbers;
          my $user_ip;
          my $logmsg = '/usr/local/billing/vpn/logmsg.pl';
          my $user_if;
          my $er_if;
          my @a;
          if($username eq 'mpd_vpn!'){
              @rule_numbers = ('350', '351', '1', '2');
              $user_ip = '192.168.25.10';
              }else{
             `$logmsg "$username connected!"`;
          }
            
                            @a=`ifconfig | grep -E '^ng.*1500' | awk -F: '{print $1}'`;
                            $user_if = substr (@a[0],0,3);

          sub ipfw_init {
              `ipfw add $rule_numbers[0] allow udp from $user_ip to any via $user_if`;
              `ipfw add $rule_numbers[1] allow tcp from $user_ip to any via $user_if`;
              `ipfw add $rule_numbers[2] count ip from any to $user_ip`;
              `ipfw add $rule_numbers[3] count ip from $user_ip to any`;
          }
          &ipfw_init();
          `$logmsg "user=$username action=connect"`;

          когда запускаю скрипт ручками- (добавив print "$user_if\n"); действительно выдает первый незанятый интерфейс ng. а когда этот скрипт стартует с mpd - почемуто поднимается (для примера) не нулевой, а первый интерфейс. если не сложно посоветуйте

          • Получить первое значение, !*! idle, 17:13 , 28-Апр-06 (5)
            >все хорошо работает, пока это запускается из отдельного скрипта, как вставляю в
            >рабочий скрипт - он начинает другое значение.
            >#!/usr/bin/perl
            >use strict;
            >$|=1;
            >my $username = $ARGV[4];
            >my @rule_numbers;
            >my $user_ip;
            >my $logmsg = '/usr/local/billing/vpn/logmsg.pl';
            >my $user_if;
            >my $er_if;
            >my @a;
            >if($username eq 'mpd_vpn!'){
            >    @rule_numbers = ('350', '351', '1', '2');
            >    $user_ip = '192.168.25.10';
            >    }else{
            >   `$logmsg "$username connected!"`;
            >}
            >
            >            
            >      @a=`ifconfig | grep -E '^ng.*1500'
            >| awk -F: '{print $1}'`;
            >            
            >      $user_if = substr (@a[0],0,3);
            >
            >sub ipfw_init {
            >    `ipfw add $rule_numbers[0] allow udp from $user_ip to
            >any via $user_if`;
            >    `ipfw add $rule_numbers[1] allow tcp from $user_ip to
            >any via $user_if`;
            >    `ipfw add $rule_numbers[2] count ip from any to
            >$user_ip`;
            >    `ipfw add $rule_numbers[3] count ip from $user_ip to
            >any`;
            >}
            >&ipfw_init();
            >`$logmsg "user=$username action=connect"`;
            >
            >когда запускаю скрипт ручками- (добавив print "$user_if\n"); действительно выдает первый незанятый интерфейс
            >ng. а когда этот скрипт стартует с mpd - почемуто поднимается
            >(для примера) не нулевой, а первый интерфейс. если не сложно посоветуйте
            >
            Пропишите полные пути и добавьте use warnings.
            Вместо @a[0] должно быть $a[0].
            Попробуйте $1 заэкранировать: \$1.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру