Недавно копаясь в старых залежах написанного кода, набрёл на мой старый проект. Когда он писался, планировалось сделать поддельный сервер Counter-Strike, который будет эксплотировать уязвимость в клиенте Counter-Strike. Позже выяснилось, что уязвима только версия 1.5 Забросил это дело. Вообщем, недавно найдя исходники, решил сделать из этого программку мониторинга Counter-Strike серверов. Вот что из этого получилось:
И так в conky есть такой параметр как ${execi}, который может выполнять переодически любую программу. Этим и воспользумся в дальнейшем.
Скачиваем архив с исполняемыми файлами и исхродниками. Как мы видим всё писалось на JAVA(Сильно не пинайте, не хотел переписывать на чём-то кошерном, да и незачем — тормозов нет), по-этому придётся установить JRE:
Для других дистрибутивов аналогично(только менеджер пакетов другой), если конечно не решили ставить офф версию( на этот случай отправляю вас на офф маны от oracle)
Проверяем работоспособнось:
Должно вывести что-то типо того:
И так виртуальная машина готова к бою. Теперь разархивируем monitoring.zip. В папке monitor находятся исполняемые файлы. Так как главный девиз Java: «Write once, run everywhere», то ничего компилировать не придётся. В данной папке есть файл ListServers. Редактируем его, а именно вписываем сервера с портами через двоеточие. Например:
Можно и ip адресса.
Далее для удобства переименовываем папку в .monitor и копируем в домашний каталог. Осталось лишь только установить conky и отредактировать его конфиг.
Далее копируем в домашнюю папку стандартый конфиг .conkyrc Его можно взять на офф. сайте или мой (мой нужно переименовать в .conkyrc )
Вообщем теперь надо отредактировать наш кофиг.
В раздел TEXT вписываем:
Данная программа будет выполняться каждые 10 секунд. Сохраняем и запускаем conky.
Должно получится что-то типо этого:

Есть также исходники. Как видно я вывожу не всю информацию. В классе CounterStrikesParser есть списки игроков и их очки:
И так в conky есть такой параметр как ${execi}, который может выполнять переодически любую программу. Этим и воспользумся в дальнейшем.
Скачиваем архив с исполняемыми файлами и исхродниками. Как мы видим всё писалось на JAVA(Сильно не пинайте, не хотел переписывать на чём-то кошерном, да и незачем — тормозов нет), по-этому придётся установить JRE:
sudo aptitude install sun-java6-jre
Для других дистрибутивов аналогично(только менеджер пакетов другой), если конечно не решили ставить офф версию( на этот случай отправляю вас на офф маны от oracle)
Проверяем работоспособнось:
java -version
Должно вывести что-то типо того:
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)
И так виртуальная машина готова к бою. Теперь разархивируем monitoring.zip. В папке monitor находятся исполняемые файлы. Так как главный девиз Java: «Write once, run everywhere», то ничего компилировать не придётся. В данной папке есть файл ListServers. Редактируем его, а именно вписываем сервера с портами через двоеточие. Например:
cs.gtn.ru:27015
cs.gtn.ru:27016
Можно и ip адресса.
Далее для удобства переименовываем папку в .monitor и копируем в домашний каталог. Осталось лишь только установить conky и отредактировать его конфиг.
sudo aptitude install conky
Далее копируем в домашнюю папку стандартый конфиг .conkyrc Его можно взять на офф. сайте или мой (мой нужно переименовать в .conkyrc )
Вообщем теперь надо отредактировать наш кофиг.
В раздел TEXT вписываем:
${color white}${execi 10 cd .monitor/ && java CounterStrikeMonitor}
Данная программа будет выполняться каждые 10 секунд. Сохраняем и запускаем conky.
Должно получится что-то типо этого:

Есть также исходники. Как видно я вывожу не всю информацию. В классе CounterStrikesParser есть списки игроков и их очки:
private ArrayList users;
private int[] scores;
По дефолту они парсятся, но не выводятся.
Пройдёмся немного по исходничкам.
И так создано несколько классов
UdpConnect - класс работы с udp протоколом. Включает методы послания запроса и получения ответа.
CounterStrikeConnect - расширяет класс UdpConnect. Включает заранее сформированный запрос к Counter-Strike серверу, проснифанный с помощью WireShark. После создания объекта этого класса, сразу же отправляется запрос на сервер. Ответ сервера можно получить с помощью метода getData()
CounterStrikesParser - класс для парсинга пришедших пакетов от сервера. Конструктор принимает 2 массива byte - это данные от сервера. Названия методов ParseFirstUdpPacket() и ParseSecondUdpPacket() сами говорят, что они делают. После парсинга объект этого класса содержит заполенные поля:
private ArrayList users;
private int[] scores;
private String nameServer;
private String map;
private int nomberOfGamers;
private int maxGamers;
CounterStrikeMonitor - исполняемый класс. И так соеденим всё вместе:
//создаём коннект и посылаем запрос
CounterStrikeConnect connect = new CounterStrikeConnect(ip, port);
//создаём парсер и парсим 2 пришедших пакета
//для получения массива информации вызываем getData() объекта connect
//в конструкторе делаем это дважды так как пришедших пакетов будет 2
CounterStrikesParser parser = new CounterStrikesParser(connect.getData(), connect.getData());
parser.ParseFirstUdpPacket(); //первый пакет приносит информацию о самом сервере
parser.ParseSecondUdpPacket(); //второй пакет приносит информацию об игроках и их фрагах
//Далее с помощью Гетеров выводим что нужно
System.out.println("Name: " + parser.getNameServer());