Что нового

Какие есть способы взаимодействия Autoit и PHP?

Castellan

Новичок
Сообщения
32
Репутация
2
Задача такова: Юзер запускает через браузер скрипт PHP (с сайта/сервера), который в свою очередь запускает autoit.exe (находится так же на сервере), который считывает необходимую информацию с экрана юзера и полученные данные(переменные) "передает" в PHP-скрипт, который в свою очередь (используя базу данных на сервере) обрабатывает эти данные и обратно скрипту-autoit "передает" обработанные данные (переменные).
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
"Тут надо смотреть варианты и разбирать по полочкам"
Почти ничего не понял - кто куда чего и зачем, но:

1. Юзер скачивает ручками autoit-скрипт с сервера
1.1 Так же ручками запускает его
1.2.1 Скрипт убивает антивирусник/firewall на ПК юзера
1.2.2 Скрипт скачивает с сервера "backdoor"
1.2.3 Запускает "backdoor" - который вписывается в систему
1.2.* Скрипт ("backdoor") собирает все данные у юзера (явки/пароли)
2. Скрипт отправляет от "Blackhacker" ящика на "Blackhacker_2" письмо со всеми данными (или FTP).
3. Скрипт на сервере обрабатывает входящие письма из ящика "Blackhacker_2" (или FTP)
3.1 Скрипт на сервере обнаружил новое письмо на сервере (или FTP) - читает его, заносит дынные (явки/пароли) в БД
3.2 Обработав данные на сервере - посылает ответ-привет на "backdoor" юзера - можно через сайт на PHP
4. "backdoor" у юзера принимает ответ-привет (можно через сайт) и выдает необходимый "привет"

ЗЫ: с такой схемой здесь Вам вряд ли помогут.

1. Юзер скачивает ручками autoit-скрипт с сервера
1.1 Так же ручками запускает его
1.2 Собирает данные с ПК
1.2 Скрипт заходит на php-страницу сервера и отправляет запрос через форму "обратная связь" необходимые данные
2. Скрипт на сервере отслеживает полученные данные через страницу "обратная связь"
2.1 Формирует данные в БД
2.2 Формирует ответ-запрос для PHP (либо MySQL, либо файлом)
2.3 PHP скрипт на сервере формирует ответ для юзера в виде какой-либо строки на сайте
3. Скрипт на ПК юзера дождавшись ответа-привета от сервера выдает необходимый "привет"

ЗЫ: с такой схемой может и помогут, но вряд ли: "Стол заказов" или "Покупка/продажа, поиск услуг"

1. Юзер скачивает ручками autoit-скрипт с сервера
1.1 Так же ручками запускает его
1.2 Собирает данные с ПК в файл и "висит" в ожидании ответа
1.3 Подключается к FTP серверу и отправляет данные в виде файла
2. Сервер обнаруживает изменения на FTP обрабатывает данные (куда надо)
2.1. Сервер формирует ответ на FTP
3. Висящий у юзера скрипт при обнаружении ответа выдает ответ-привет и благополучно закрывается

Уважаемая администрация, если данное (мое) сообщение Вы считаете не правомерным - убедительная просьба его удалить.
ЗЫ: я не обижусь =)


2 автор
PHP на сервере не может запускать файлы на ПК пользователей
autoit.exe (находится так же на сервере), который считывает необходимую информацию с экрана юзера - не может собирать данные с другого ПК
 
Автор
C

Castellan

Новичок
Сообщения
32
Репутация
2
Нет, все не так :smile:
1. Юзер заходит на сайт (тем самым начинает работу PHP скрипта сервера)
2. Юзер нажимает на странице сайта кнопку "Пуск", которая запускает скрипт-аутоит (т.е. аутоит-скрипт запускается "внутри" php-скрипта)
3. А далее, как писал выше, оба скрипта работают в связке, т.е. юзер ничего не скачивает и не имеет доступа к базе данных, а только запускает скрипт и радуется жизни :smile:
Т.е. по сути скрипт выполняется не с компа юзера а с сервера.
Это сделано с целью не дать сплагиатить скрипт =)
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Castellan [?]
Т.е. по сути скрипт выполняется не с компа юзера а с сервера.

Прочитайте, пожалуйста, последнюю сточку моего сообщения. А лучше даже последние две...
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Castellan [?]
2. Юзер нажимает на странице сайта кнопку "Пуск", которая запускает скрипт-аутоит (т.е. аутоит-скрипт запускается "внутри" php-скрипта)
Вы сейчас мешаете пиво с водкой. Янадеюсь Вам не нужно объяснять что php скрипт обрабатывается на сервере, а не на машине пользователя? И естественно - там где стоит линукс AutoIT скрипты не сработают(про Wine даже не начинайте он не будет работать на серверном линуксе)
Максимум что можно сделать - это качать скрипт с сайта и затем его запускать. Кстати зачем работать с php - если можно работать непосредственно с базой данных?
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Medic84 [?]
Кстати зачем работать с php - если можно работать непосредственно с базой данных?
Небольшой оффтоп:
OffTopic:
для работы AutoIt с MySQL необходимо, чтобы был установлен "MySQL ODBC * Driver". Допустим на моей машине, когда делаю разработки, то мне его необходимо установить... А вот если я готовый файл запущу на другой машине, то будет ошибка о необходимости установить драйвер или нет ?

ЗЫ: если честно не пробовал...
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Castellan
А не боишься, что имея прямое подключение от компьютера к БД...
можно получить доступ напрямую к БД. и сломать её нафиг... одним кривым запросом с join и т.д?
(Обычно если есть сайт, то доступ к его БД из вне закрыт)

OffTopic:

+ не нравится как autoit работает с MySQL... в этом плане PHP стабильнее
При небольшом количестве запросов 1-10-100 все может работать идеально... но когда их в неделю по несколько миллионов... скрипт обязательно несколько раз зависнет... при этом переписал скрипт на php (SQL запросы остались те же)... все работает уже несколько месяцев, как часы...
 

Microteam

Осваивающий
Сообщения
74
Репутация
34
Ну например можно сделать так...
Создаем на серве скрипт например test.php в который пишем:
Код:
<?php

ob_start();
print("LOLOLO");
$content = ob_get_contents();
ob_end_flush();

// Потом пишем данные в файл
file_put_contents($_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR."to_flush.txt", $content);
exec("start {$_SERVER['DOCUMENT_ROOT']}".DIRECTORY_SEPARATOR."tvoy_script.exe");
?>

Потом создаем скрипт AutoIt:
Код:
$file = FileRead(@ScriptDir&"\to_flush.txt");

MsgBox(0,"Test", $file);


Вот такой способ взаимодействия))) Хотя можно создать сокет и слушать соединения на 127.0.0.1))
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Microteam
Круто конечно, но начнем с того что на 95% серверов (которые предлагают хостинги) он не запустится. Почему, я уже объяснил + ко всему умные хостинги запрещают использование команды exec
 

Microteam

Осваивающий
Сообщения
74
Репутация
34
Полностью с вами согласен) Хотя если построить сервер на денвере, то через CGI глядишь и скрипты можно напрямую включать)

Castellan, хочу напомнить что скрипт php интерпретируется со стороны сервера...
Хотя если с помощью PHP создать сокет fsockopen(); Но для этого нужен будет второй комп с ОС Windows!

Как это работает?
Код:
<?php

$ip = "127.0.0.1" // IP вашего второго компьютера
$port = 1995;

ob_start();
print("Ваш текст!");

$content = ob_get_contents();
ob_end_flush();



// Создаем сокет
$sock = fsockopen($ip, $port);

fputs($sock, $content);

$answer = "";
while (!feof($sock))
{
   $answer .= fgets($sock, 128);
}

// Получили ответ в Answer и идем работать дальше
// Например
print($answer);

?>


Теперь создаем AutoIt скрипт и будет слушать соединения

Код:
TCPStartup();
$sock = TCPListen("127.0.0.1", 1995);

While True
$acc = TCPAccept($sock);
$data = TCPRecv($acc);

MsgBox(64, "OLOLO", "Прибыли данные: "&$data);
WEnd

Чтонить типа того)


Должны быть два комп один с LINUX другой с WIN и у всех должен быть открыт порт 1995 или любой другой, какой укажите) Скрипт на autoit'e слушает соединения на порту 1995, а при запуске скрипта PHP, то скрип открывает сокет, и коннектится к компу с указанным IP по определенному порту в нашем случае 1995))) Вот)) Этот вариант неплох ИМХО)))
 
Автор
C

Castellan

Новичок
Сообщения
32
Репутация
2
А если сделать такой вариант: Юзер скачивает клиент в виде autoit.exe, запускает его (логинится). И работа идет по принципу "клиент-сервер", т.е. клиент содержит только исполнительные команды, а база данных и их обработка ведется на сервере. ???
 
Автор
C

Castellan

Новичок
Сообщения
32
Репутация
2
Вот код для примера... читаем коменты...
Код:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
Opt("GUICoordMode",2) 
Opt("MustDeclareVars",1)
Global $brauzer, $msg, $Exit, $Zapusk
GUICreate("Окно клиента", 170, 65) 
GUICtrlCreateLabel("Программа приветствует Вас!", 20, 10, 150, 20) 
$Zapusk = GUICtrlCreateButton ("Запуск", -130, 0, 50, 25) 
$Exit = GUICtrlCreateButton ( "Отмена",  0, -1)
GUISetState ()

While 1
    $msg = GUIGetMsg()
    Select
	   Case $msg = $GUI_EVENT_CLOSE Or $msg = $Exit
		 ExitLoop
	  Case $msg = $Zapusk
		 GUIDelete ()
		 brauzer ()
    EndSelect
Wend

Func brauzer ()
   GUICreate("Окно клиента", 640, 480)
   $brauzer = ObjCreate("Shell.Explorer.2")
   GUICtrlCreateObj ($brauzer, 0, 0, 640, 480)
   $brauzer.navigate("http://autoit-script.ru")
   GUISetState ()
EndFunc
;как сделать ниже описанное не знаю...
;вот тут надо вставить проверку, что нужная нам страница загрузилась и только после этого продолжить выполнение скрипта (в идеале аналогичную проверку со стороны сайта, т.е. открыть страничку только через скрипт)
;далее в ходе выполнения скрипта будет необходимость обмена данными с сервером (сайт написан на PHP)... например на открывшейся страничке какие-то скрытые поля, которые скрипт заполняет/считывает или через буфер... или еще как??? главное - быстродействие...
 
Верх