maddot.ru Linux → Ubuntu - удаленный мониторинг состояния ЭВМ
dd
 
Рубрики
» Компьютеры
» Операционные системы
» Android
» Linux
» Windows
» Разное



» Все статьи (Списком)
Популярное
» Все заметки (Списком)
От Yuriy 23:27 28.09
От Айдар 10:48 04.02
От Роман 22:26 15.06
От Евгений 16:46 13.06
От Mike 00:01 23.04
От Вячеслав 20:44 22.04
От Сергей 18:15 11.02
От Надежда 10:51 24.05
От Надежда 10:42 24.05
От bakaut 17:33 14.02
От vlasmet 08:28 18.11
От Mike 11:51 17.05




Друзья
Хостинг Макхост
Качественный платный хостинг. Широкий спектр качественных хостинг услуг с 2004 года.
Ваш IP: 54.163.209.109
Вы на узле: 178.208.83.19
URL: maddot.ru
Время сервера: 2017-12-17T18:45:39+03:00

Ubuntu - удаленный мониторинг состояния ЭВМ

05 Окт 2014

Ничего не может так скрасить воскресный вечер, как изобретение очередного велосипеда. Зато своего, собственного. На этот раз мы напишем простой сервер на bash, используя утилиту nc. А там, где сервер - там и клиент, так что в добавок мы напишем простой клиент для Android на Java к нашему серверу. Можно было-бы обойтись и браузером, но как тогда хвастаться перед друзьями, что у нас есть свой софт для мониторинга своего ПК на OS Linux?

Вступление

Результатом сегодняшней статьи станет небольшое клиент-серверное решение задачки удаленного мониторинга состояния компьютера под управлением OS Linux. Мы получим возможность следить за температурой компьютера и выполняемыми в данный момент процессами. Для клиентской части не понадобиться иметь терминал.. по большому счету - ничего кроме браузера и не понадобится. Но простой клиент мы все-же сделаем - для удобства и морального удовлетворения ради. В решении этой задачи нам помогут утилита NetCat и Android (телефон-то всегда под рукой).

NetCat - это утилита для Linux, позволяющая устанавливать соединения TCP и UDP, принимать и передавать данные. Эта довольно простая в обращении утилита, однако, имеет достаточно большой потенциал для ее применения в повседневной жизни. С ее помощью можно организовать чат между двума рабочими станциями, передать файл или даже весь жесткий диск. Но сегодня нам понадобиться ее возможность создавать соединение на определееном порту и слушать его - тоесть, служить сервером.

Также, если у тебя есть желание самому скомпилировать утилиту-клиент для Android, которую мы сегодня напишем - тебе понадобится среда разработки Eclipse (или любая другая), но примеры в статье будут именно для Eclipse. Заострять внимание на установке IDE я не буду - скачать готовую сборку для программирования под Android можно на сайте: https://developer.android.com/sdk/index.html (Программа бесплатная, без регистрации и смс :) ). Можешь, впрочем, и не качать тяжелую среду разработки и всякие sdk - в конце статьи я выложу уже готовую к использованию утилиту apk.

Серверная часть

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

#!/bin/bash

while true; do { echo -e 'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n'; bash load_with_html.sh; } | nc -l 1488; done
Тоесть при обращении к серверу (nc) мы просто отдаем заголовки что все в порядке (200), и что отдаем мы HTML код - браузер это хава.. принимает и выводит то, что отдаст ему скрипт load_with_html.sh. Сервер я запускаю на порту 1488 - это ничем не обусловлено, на самом деле мне просто захотелось использовать именно этот порт и это совершенно не значит, что я националист или другой "ист" :) Ты можешь поменять адрес порта в зависимости от потребностей (например, если 1488 уже занят у тебя другим сервисом).

Итак, берем скрипт, что выше, сохраняем его в файл, допустим, ~/Tools/miniserv.sh, даем ему права: chmod +x ~/Tools/miniserv.sh и, затем, создаем файл-скрипт: ~/Tools/load_with_html.sh в котором сформируем данные для вывода. Выведем в нем пару полезных параметров системы и оформим все красивенько - с помошщью HTML, CSS и JavaScript.

load_with_html.sh:
#!/bin/bash

echo "<!DOCTYPE HTML>"
echo "<html>"
echo "<head>"
echo "<title>My Linux PC State</title>"

echo "<style type=\"text/css\">"
echo "div.sensors {"
echo "	font-size: 38px;"
echo "	color:#000000;"
echo "	background-color: #DCF7FF;"
echo "	text-align:center;"
echo "	border:1px dotted;"
echo "	margin-bottom:8px;"
echo "}"
echo "pre {"
echo "width:100%;"
echo "overflow: auto;"
echo "}"
echo "#hide_sensors {"
echo "	display: none;"
echo "}"
echo "#hide_uname {"
echo "	display: none;"
echo "}"
echo "#hide_proc {"
echo "	display: none;"
echo "}"
echo "</style>"
echo "<script type=\"text/javascript\">"
echo "			function hideme(id){"
echo "				if(document.getElementById(id).style.display == 'block') {"
echo "					document.getElementById(id).style.display = 'none';"
echo "				} else {"
echo "					document.getElementById(id).style.display = 'block';"
echo "				}"
echo "			}"
echo "</script>"

echo "</head>"
echo "<body>"

##Uname
echo "<div class=\"sensors\" onClick=\"hideme('hide_uname');\">"
echo "Linux version"
echo "</div>"
echo "<div id=\"hide_uname\" style=\"display: none;\">"
echo "<pre>"
uname -a
echo "</pre>"
echo "</div>"

##Sensors
echo "<div class=\"sensors\" onClick=\"hideme('hide_sensors');\">"
echo "Sensors"
echo "</div>"
echo "<div id=\"hide_sensors\" style=\"display: none;\">"
echo "<pre>"
sensors
echo "</pre>"
echo "</div>"

##Processes
echo "<div class=\"sensors\" onClick=\"hideme('hide_proc');\">"
echo "Processes"
echo "</div>"
echo "<div id=\"hide_proc\" style=\"display: none;\">"
echo "<pre>"
ps -ela
echo "</pre>"
echo "</div>"

echo "</body>"
echo "</html>"


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

cd ~/Tools
./miniserv.sh
И для проверки обратись через браузер по адресу: 127.0.0.1:1488 . Если все прошло хорошо, то ты увидишь следующую станичку (информация будет открываться при клике на соответствующие пункты):

Клиентская часть (Для продвинутых)

Впринципе, клиентскую часть создавать совершенно не обязательно - можно уже обращатся к своему компьютеру через браузер по адресу ip:port, но без нее, согласись, все это выглядит каким-то незавершенным. К тому-же клиент для телефона писать от силы десять минут.

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

Отлично, Eclipse запущен. Выбираем в меню: File->New->Android Application Project (создаем новый проект) и заполняем последовательно по примерам на скриншотах ниже:











Обрати внимание - в меню Eclipse - Window->Sdk manager должны быть установленны соответствующие версии SDK.

В файле AndroidManifest.xml не забываем указать:
<uses-permission android:name="android.permission.INTERNET" />

Содержимое файла MainActivity.java:
package com.maddot.twmp_linux;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	WebView myWebView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        Button nowGet = (Button)findViewById(R.id.button1);
        nowGet.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            	TextView ipGet = (TextView) findViewById(R.id.ip);
				String ip = ipGet.getText().toString();
            	TextView portGet = (TextView) findViewById(R.id.port);
				String port = portGet.getText().toString();
					myWebView = (WebView) findViewById(R.id.webView1);
				    myWebView.getSettings().setJavaScriptEnabled(true);
				    myWebView.setHorizontalScrollBarEnabled(false);
				    myWebView.loadUrl("http://"+ip+":"+port);
            }

        });
	}
}

Содержимое файла activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${packageName}.${activityClass}" >

    <EditText
        android:id="@+id/ip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:hint="0.0.0.0" />

    <EditText
        android:id="@+id/port"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/ip"
        android:ems="10"
        android:hint="port"
        android:text="1488" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/ip"
        android:text="Connect and show info" />

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/button1"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

Как должен выглядить интерфейс:


Идея в том, чтобы эта утилита обладала достаточной универсальностью и простотой - вверху в поля ввода можно указать IP и Порт компьютера и после клика на кнопку в WebView браузер загрузится ответ сервера - то, что нужно, просто и удобно.
Отлично, часть для продвинутых читателей закончена (осталось только собрать проект и скинуть его на телефон или протестировать на эмуляторе).
А для тех, кому не хочется/не нужно разбираться со всеми этими Java'ми:

Клиентская часть (Для всех)

Скачать утилиту-клиент TWMP-Linux для Android:
http://maddot.ru/share/files/1412521621_twmp-linux.apk [~777 Kb]




Итак, последовательность использования того, что мы сегодня сделали:
  • Запускаем на ПК сервер: cd ~/Tools -> ./miniserv.sh & (&, чтобы терминал вернул курсор ввода)
  • Когда нужно посмотреть, что там с компьютером - Запускаем TWMP-Linux или заходим через браузер на ip:port компьютера
Profit!


ρ2877
Рубрика → Linux
Метки: ubuntu linux android сервер статистика мониторинг клиент-сервер



B s i

 




Счетчики 

Яндекс.Метрика