Управление сервером с андроида

Управление серверами с телефона: мобильный клиент сервиса RUVDS

Контролировать работу VDS со смартфона не всегда удобно. Маленькие экраны не позволяют нормально работать с сайтом хостера и в этом случае на выручку приходит приложение.

Оптимизация сайта для мобильных телефонов — задача непростая. Небольшая диагональ экрана серьезно ограничивает возможности веб-разработчика, к тому же сценарии использования одного и того же сервиса с разнотипных устройств существенно отличаются между собой. Мы решили развивать сайт с прицелом на браузеры для настольных компьютеров и планшетов, а для смартфонов создать отдельное приложение. Такой подход сейчас популярен и он неплохо себя зарекомендовал. Пока доступна только программа для Android, в которой реализованы самые необходимые клиентам функции — со временем их станет больше.

Установка и подключение

RuVDS Client можно скачать бесплатно в магазине Google Play. Отметим, что в данный момент программа для работы требует минимум прав на устройстве.

Для подключения в настройках личного кабинета необходимо разрешить внешнюю авторизацию. Обратите внимание, что двухфакторная аутентификация при работе через API пока недоступна и эта настройка несколько снизит безопасность вашей учетной записи. Пароль от неё не должен использоваться на других сервисах, а хранить его необходимо в надёжном месте. После включения опции на привязанный к аккаунту адрес придёт электронное письмо с уведомлением.

Возможности программы

Пока в RuVDS Client реализована только самая необходимая функциональность. В приложении можно быстро узнать баланс лицевого счёта, посмотреть историю пополнений и списаний, а также проверить состояние серверов и управлять их работой.

Помимо основных характеристик сервера, в мобильном клиенте RuVDS доступна статистика использования ресурсов процессора, накопителей и сети. С помощью специальной вкладки администратор может увидеть, как чувствуют себя подопечные машины, в какое время с ними возникали проблемы и из-за чего они возникали. Ещё одна вкладка позволяет выполнять основные команды: останавливать и перезапускать сервер, в т.ч. аварийно, если он не откликается. Создание и удаление VPS мы пока добавлять в приложение не стали по соображениям безопасности — это лучше делать в личном кабинете на сайте.

Стек технологий

В основе RuVDS Client лежит паттерн MVP, реализованный с помощью библиотеки Moxy. Такой подход мы сочли оптимальным, хотя можно также использовать MVVM или MVI — это вопрос личных предпочтений и наличия у корпоративных разработчиков необходимого опыта. Наш продукт построен на Single Activity Application: главный плюс здесь — жизненный цикл приложения равен жизненному циклу activity, а кроме того работать с фрагментами гораздо удобнее. Навигация реализована при помощи Cicerone — это одна из лучших подобных библиотек, пригодная для создания мобильных программ любой сложности. Также важным для нас стал вопрос выбора DI: поскольку приложение написано на Kotlin, рассматривались Dagger2 и Koin. В итоге мы остановились на последнем варианте, поскольку хотелось попробовать что-то более простое.

Перспективы

В нынешней версии нет каких-то сложных решений, но её архитектура позволяет быстро создавать новую функциональность или изменять существующую. Хотелось бы добавить двухфакторную аутентификацию через API, заказ и удаление серверов, изменение их конфигураций, а также доступ к консоли (экран, клавиатура, мышь). Возможно стоит написать версию для планшетов. Чтобы сделать программу удобнее, мы хотим получить фидбек от клиентов и поэтому решили провести небольшой опрос.

Источник

Управляем компьютером с Android устройства

Начало

А началось все с того, что вызывает меня генеральный к себе, и говорит: «Вот видишь телефон? Хочу чтобы там была кнопка, я на нее нажимаю, и у меня в ноутбуке кино включается. Нажимаю другую – музыка играет.» И еще чего-то много наговорил, уж не помню. «Задача понятна? Выполняй!» Вот уж не знаю, с чего такая потребность у него возникла. То ли звезды не под тем углом встали, то ли сон какой приснился. Короче, не поймешь этих богатых… Ну да ладно.

Читайте также:  Аналог peachy для андроид

Поначалу полез рыться в Гугл в поисках подходящей программы, а потом подумал – а какого черта? Напишу сам. Тем более, что задача не показалась сложной, да и “зов кода” уже давал о себе знать (этакая профессиональная it-ломка). Вот и решил соединить Windows и Android собственными силами.

То, что он просил, я сделал за пару дней. Но здесь я не хочу городить много кода, проверок и обработок исключений и т.п. Статья скорее предназначена для самых маленьких, как основа, опираясь на которую, можно построить что-то более масштабное. Ни в коем случае не претендую на оригинальность, явно кто-то что-то подобное писал, я просто предлагаю свой вариант. В общем, всем, кому интересно, посвящается.

Что мы имеем

Значит так. С одной стороны, у нас телефон с Android на борту, с другой — Windows с установленными программами, притом некоторые из этих программ нам надо запускать, подав команду с телефона.
Телефон и компьютер свяжем через локальную сеть, тут без вариантов (ну не смски же посылать). Таким образом, будем писать две программы. Первая — это сервер, работающий на компьютере, задача этой программы — открыть и слушать порт. Если на этот порт падает что-то полезное, то выполнить заданное нами действие. Вторая программа — это клиент, запущенный на телефоне, ее задача обработать действия пользователя, подключиться к серверу и передать информацию.

Немного о сокетах

Тема программирование сокетов до того уже заезженная, что и особо говорить нечего. Но все же в двух словах, для тех, кто не любит ходить по ссылкам.

Сокет — это программный интерфейс, который позволяет устанавливать связь между двумя процессами, используя протокол tcp/ip. Сокет ассоциирован с двумя аспектами: ip-адресом и портом. Где ip-адрес — это адрес хоста (компьютера) в сети, с ним работает протокол IP. Port — это идентификатор приложения, к которому адресовано соединение, тут работает протокол TCP. Порт может быть как TCP, так и UDP, в этой статье я буду использовать только TCP. Поскольку ip-адрес является уникальным как в сети интернет, так и в локальной сети, то он однозначно определяет адрес отправителя и адрес принимающего. Порт же является уникальным в пределах операционной системы, он определяет приложение, с которым мы хотим взаимодействовать. Порты могут быть стандартными, например, 80 закреплен за HTTP, или 3389 — RDP. Вы можете использовать любой незанятый порт, но стандартные лучше не трогать. Очень хорошо и с примерами о сокетах написано здесь.

Сервер. Начинаем хулиганить

Запускать Aimp, Windows Media Player и т.п. даже с телефона — это не интересно, да и на базе этой статьи вы сможете все это легко реализовать, немного переделав код. Давайте лучше побезобразничаем. Будим крутить-вертеть экран монитора как нам вздумается или выводит неожиданные сообщения (этакий однонаправленный ацкий мессенджер), и самое ужасное — выключим компьютер! Правда, за это могут и на вилы надеть. Ну да ладно, пускай сначала поймают.

Итак, приступим. В Visual Studio создаем новое Windows Form приложением с именем, скажем, FunnyJoke. Открываем файл Program.cs и удаляем весь код в теле функции Main. Этот код инициализирует главную форму приложения, нашему серверу никакие окна не нужны, он должен сидеть тихо мирно и ждать команд.

В классе Program определим следующие переменные:

Я взял порт 10000, именно его и будет слушать наш сервер, вместо ip адреса задал 0.0.0.0 это говорит о том, что будут обрабатываться все доступные сетевые интерфейсы. Это не совсем правильно, но для начала сойдет. Далее я определил три константы, которые задают коды команд, приходящие от клиента. В начале проекта не забываем подключить:

Читайте также:  Dvb t2 ресиверы с андроид

Теперь, вместо удаленного кода в функции Main вставляем следующий:

Пример хорошо комментирован. Но все же поясню. Сначала создаем локальную конечную точку и ассоциируем ее с нашим ip адресом и портом. Затем, определяем основной сокет, связываем его с конечной точкой, и переводим в режим прослушивания. После этого входим в бесконечный цикл, и начиная со строки:

наш сервер переходит в состояние ожидания соединения. При удачном соединении создастся новый экземпляр Socket, посредствам которого мы и будем общаться с нашим клиентом. После того как соединение установлено начинаем читать данные:

Команды клиента закодированы однобайтовым кодом (описаны в начале программы), сервер расшифровав код команды начинает ее выполнять, после этого снова переходит в режим ожидания. Исключением является codeMsg, т.к. после нее ожидается набор байт, содержащий строку сообщения. Поэтому, получив эту команду сервер снова читает данные с сокета:

Строка, приходящая от клиента, имеет кодировку символов UTF-8, поэтому прежде чем показать ее несчастному пользователю, необходимо привести ее к стандартному виду.

Что бы упростить программу, и не создавать лишние диалоги я использовал стандартный класс MessageBox, но у таков подхода есть один недостаток. MessageBox создает модальное окно, которое блокирует поток всего приложения. Другими словами, пока открыто окно с сообщением наш сервер ничего не делает. Минус конечно, но за простоту надо платить.

Процедуру, изменения ориентации экрана, расписывать не буду, ее код я выполнил так как рекомендует Microsoft вот тут. Как повернуть экран средствами .NET я не нашел. Это легко осуществимо для мобильных платформ, а вот для обычного PC оказалась неразрешимая проблема. Но, на помощь пришел старый добрый WINAPI и все разрулил.
Выключаем компьютер штатными средствами Windows, путем вызова команды shutdown с соответствующими флагами.

С сервером, пожалуй, все. Исходный код проекта я прикреплю в конце статьи.

Клиент

Клиент будем писать в Android Studio, поскольку мне эта IDE больше нравится чем Eclipse. Любителям последнего думаю не составит больших трудностей переделать проект. Для отладки я использовал VirtualBox с установленной виртуальной машиной Android, ибо родной эмулятор жутко тормозной, и жизни не хватить что бы с его помощью что-то отладить. Ну и периодически проверял на «живом» телефоне. Итак, создаем проект с именем FunnyJoke, задаем минимальную версию API, которую способен утянуть ваш телефон (у меня 16) и выбираем Empty Activity. Все остальное по умолчанию. Делаем разметку представления. С дизайном я шибко не извращался, кому надо пускай рисует красивые кнопки, размещает их по фен Шую и т.п. Я сделал просто: два поля типа EditText, первое для ввода ip адреса контролируемого компьютера, второе для текста сообщения, и кнопка, которая заставит поворачиваться рабочий стол. А вот кнопку завершения работы я сделал большую и угрожающее красную. Это чтоб случайно не нажать.

Тут стоит обратить внимание на поле edIPaddress, в нем стоит фильтрация на ввод только цифр и. (точка), так-как поле предназначено для ввода ip адреса. Надо сказать, что это единственная проверка на правильность введенных данных, все остальное остается на совести пользователя. Еще хочу cказать о кнопке btnPowerOff ее состояние отслеживает селектор, и в зависимости от того нажата она или нет меняет изображение (иначе, не понятно произошло ли нажатие, кнопка будет выглядеть как статичная картинка). Вот код селектора button_img.xml:

Соответственно в ресурсах должны быть две картинки одна для нажатого состояния, другая для обычного. Получится вот такой экран:

На этом с разметкой закончим. Переходим к файлу MainActivity.java. В первую очередь, так же, как и в сервере, определяем коды команд и некоторые переменные:

Далее переходим к обработчику нажатия кнопок. Обратите внимание, что обработчик один, и какая копка была нажата определяем по идентификатору. В первую очередь получаем строку с поля edIPaddress, если поле не заполнено, то выводим сообщение о необходимости ввода ip адреса, и больше ничего не делаем.

Читайте также:  Chip and dale remastered android

В Android не рекомендуется создавать долгоиграющие процессы в основном потоке, это связанно с тем, что возможно “подвисание” программы, и пользователь или система может просто закрыть приложение, не дождавшись ответа. К таким долгоиграющим процессам относится и работа с сетью. В этом случае необходимо создать дополнительный поток, в котором и выполнять “долгий” код. В java есть стандартный класс Thread, который позволяет управлять потоками но, его мы использовать не будем, т.к. в Android существует специально предназначенный для этого класс AsyncTask. Подробно можно почитать здесь или здесь.
Создаем класс, который будет заниматься отправкой сообщения, его родителем делаем AsyncTask, и переопределяем метод doInBackground в теле которого и будет находится основной код:

Сначала создаем экземпляр класса InetAddress, который будет содержать в себе ip сервера. Потом создаем сокет, связываем его с удаленным адресом и портом, и запрашиваем стандартный поток ввода/вывода (вернее только вывода, потому что наш клиент ничего не получает). И наконец, в зависимости от значения переменной codeCommand, посылаем сообщение серверу.

Теперь вернемся к нашему обработчику нажатия кнопок, создадим экземпляр класса SenderThread, затем в зависимости от того какая кнопка была нажата инициализируем переменную codeCommand, по ней наш поток будет определять что мы от него хотим. И наконец, активируем, вызвав метод execute().

Немного поправим манифест приложения, дадим разрешение на использование сети и wi-fi, без этого ничего работать не будет:

Все! Можно собирать и проверять. Вот результат:

Источник

Запускаем SSH сервер на Android устройстве с использованием Termux

У меня часто бывают ситуации, когда мне приходится исправлять или дополнять свой код с чужого ПК. Однако, не на всех рабочих станциях есть мое рабочее окружение. Также, установка нужных компонентов, а потом их удаление занимает лишнее время. Поэтому мне в голову пришла идея — сделать удаленное рабочее окружение, которое всегда будет рядом.

С этим мне решил помочь Termux.

Из названия статьи вы скорее всего поняли, о чем сейчас пойдет речь. Однако, сразу хочу предупредить, что данный способ может подойти не всем.

Итак, приступим.

Нам понадобится сам эмулятор терминала Linux — Termux. Это отличное мобильное приложение, которое подходит не только для сервера, но и для других целей.

Изначально нужно установить OpenSSH пакет.

Далее, нужно сгенерировать ключ для подключения к нашему серверу.

В директории .ssh создалось два файла — id_rsa и id_rsa.pub . Копируем содержимое файла id_rsa.pub в файл authorized_keys .

Теперь мы можем запустить сервер и к нему может подключиться любой, у кого есть ключ. Для запуска сeрвeра используется команда.

Если вам надо посмотреть включен сервер или выключен.

Подключение к серверу с помощью PuTTY.

Мы запустили сервер и теперь нам надо к нему подключиться. Сперва нужно скопировать ключ в память Android устройства, чтобы потом его можно было скопировать на машину, с которой мы будем подключаться. Для этого, нужно дать доступ к памяти устройства.

Далее, копируем ключ в память.

После этого, копируем файл на машину.

Теперь нам понадобится PuTTYgen.
Запускаем программу и загружаем файл, нажимая на кнопку Load. После этого сохраняем приватный ключ (save private key) в формате *.ppk.

Отлично, теперь у нас есть ключ. Осталось только подключиться.

Скачаем сам PuTTY.
Запускаем его. В поле IP адреса вводим локальный адрес нашего Android устройства. Чтобы посмотреть локальный адрес, нужно зайти в Termux и ввести команду.

В разделе wlan0 будет написан локальный IP адрес.

В поле порта вводим стандартный порт для ssh сервера — 8022. Далее, переходим в SSH → Auth и нажимаем кнопку Browse.

Находим тот файл, который сохранили в формате *.ppk, и нажимаем Open. После запуска нажимаем Enter.

Все, мы подключились.

Далее вы можете настроить ваше окружение и подключаться к нему в любое время.

Источник

Оцените статью