C#. Генерация строки из случайных символов.

Задача

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

Решение

Делается это довольно просто. Поручим формирование строки отдельной функции.
Во входных параметрах передадим ей строку, содержащую набор символов, из которых будет сформирована выходная случайная строка (параметр Alphabet) и длину генерируемой строки (параметр Length)

string GenRandomString(string Alphabet, int Length)
{
	...
}

Внутри функции.

//создаем объект Random, генерирующий случайные числа
Random rnd = new Random();
//объект StringBuilder с заранее заданным размером буфера под результирующую строку
StringBuilder sb = new StringBuilder(Length-1);
//переменную для хранения случайной позиции символа из строки Alphabet
int Position = 0;

Далее в цикле генерируем случайную строку:

for (int i = 0; i < Length; i++)
            {
                //получаем случайное число от 0 до последнего
                //символа в строке Alphabet
                Position = rnd.Next(0, Alphabet.Length-1);
                //добавляем выбранный символ в объект
                //StringBuilder
                sb.Append(Alphabet[Position]);                
            }

Возвращаем сгенерированную строку:

return sb.ToString();

Код функции на PasteBin

Пример использования функции

txtReturn.Text = GenRandomString("QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm", 10);

возвращает строку случайных символов длиной 10 знаков, состоящую из заглавных и строчных букв английского алфавита.

Немного об оптимизации

День метеоролога

История к недавно состоявшемуся дню метеоролога. Автор ███████, редактура моя.

Посвящается брату и маме.

На момент истории мне было лет 5-6, в школу я не ходил, а в садик я не пошел, потому что заболел. В детстве я вообще был болезненным ребенком, и любой простудифилис лип ко мне, как банный лист. Сестра, обычно остававшаяся со мной в таких случаях тоже заболела. И мама взяла меня на работу. На самом деле я был в восторге, ведь моя мама работала не скучной чиновницей в ОГА, не продавщицей в магазине, и даже не трактористкой в колхозе. Моя мама была Метеорологом. Именно так, с большой буквы М. Если вы никогда не были на метеостанции, напроситесь и посетите это место. Метеостанция — ужасно атмосферна. Непонятного назначения приборы возвышаются на рабочих столах, скрипят, пищат, тикают, выполняя свою такую нужную, но абсолютно непонятную «гражданскому» не посвященному в таинства метеорологии работу. В дальнем углу обязательно найдется ртутный столб, и тут он будет не метафорой, а всамделишней метровой колбой, заполненной ртутью. Загляните с разрешения метеоролога в ИВО, прибор, определяющий высоту облаков. Старые советские, но надежные его версии напоминают гибрид осциллографа и игрового автомата «морской бой». Резиновая туба обнимет ваше лицо, когда вы прижметесь к ней, и, вдохнув неповторимый запах нагретого, живого прибора, вы погрузитесь в небо, а невидимый луч будет вашим проводником. В другом углу мерно тикают барографы (суточные и недельные), под столом покоится радиометр, способный предупредить город о надвигающемся апокалипсисе.

Читать далее

Впервые опубликовано на Мракопедии

Более сложный способ мониторинга состояния сервера на Linux в реальном времени.

Продолжаю тему, начатую в предыдущей заметке [КОПИЯ]. В ней описывал получение данных от определенных скриптов и процессов запущенных на сервере под управлением Linux с помощью SSH, псевдотерминала и отдельного пользователя, создаваемого специально для целей мониторинга.

Будем посмотреть другой способ, с одной стороны, более сложный и требующий владения каким-нибудь языком программирования, кроме Bash-скриптов. Хотя, можно обойтись и исключительно одним Bash’ем, если клиент и сервер под Linux, или Bash прикрутили к Windows (cygwin(?), не пробовал, не знаю). А с другой стороны, наоборот, способ простой безопасный, требующий минимум вмешательства в настройки сервера.

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

Примечание: Термины «клиент» и «сервер» могут по ходу статьи быть неоднозначно истолкованными.
Серверное приложение будет наоборот, работать на «клиентском», «операторском» рабочем месте, а «сервер», в смысле компьютер с Linux, на котором я запускаю свои скрипты, и который управляет нужной мне железякой, станет вполне себе клиентом.
В общем, чтобы не вносить путаницы я условлюсь называть рабочее место оператора «локальным компьютером», а тот, который «сервер в привычном понимании» — «удаленным».

Задача

Такая же, как и в предыдущей заметке. Имеется удаленный компьютер под управлением Linux, рулящий системой контроля температуры и давления.
На самом деле, рулить он может чем угодно: от домашнего FTP с котиками или соединения с Интернетом, до управления СКД, открытием ворот, дверей, врат в Ад, личным концлагерем и т.д.
Суть в том, что нужно, чтобы удаленная система сигнализировала оператору об изменении своего состояния (изменении температуры, разрыва соединения с Интернетом, пришествии Сатаны). Оператор, как обычно, сидит под Windows (как в большинстве организаций в СНГ).

Некоторые соглашения

Для простоты условимся, что локальный и удаленный компьютер находятся в одной локальной сети (и одной подсети) 10.10.0.0/24, IP-адрес локального компьютера 10.10.0.30, прием данных производится через сетевой порт 11000 локального компьютера. Локальный и удаленный компьютеры обмениваются данными по протоколу TCP, данные представляют собой Unicode-строки.

Как это организовано на локальном и удаленном компьютере

Код

Сервера приема сообщений:
Смотреть на PasteBin
Скачать с Mega.nz

Скрипта отправки сообщений:
Смотреть на PasteBin
Скачать с Mega.nz

Источники

1. Клиент-серверное приложение на потоковом сокете TCP [Копия]
2. Как открыть TCP-/UDP-сокет средствами командной оболочки bash [Копия]

Видеоиллюстрация

Прямая ссылка

Простой способ мониторинга состояния сервера.

Введение

Понадобилось мониторить состояние сервера, точнее не всего сервера, а определенного демона, на сервере запускаемого. Понятно, что самым простым способом мониторинга чего-то работающего в фоне, является просмотр соответствующих логов. Но такой способ на самом деле дает весьма мало интерактивности, надо постоянно заходить по SSH, ковыряться в этих самых логах. Хочется, чтоб при изменении состояния, или же по определенной команде от определенного пользователя, сервер нам все рассказывал сам.
Хорошо, если демон умеет при изменении состояния запускать некие пользовательские скрипты. Так умеет, например, демон OpenVPN или, например, демон небольшой промышленной системы метеоконтроля, который я использовал в данном примере.
Вкратце, имеется плата на Arduino, обрабатывающая показания с нескольких датчиков и передающая их в удобоваримом формате через COM-порт демону, запущенному на сервере. Демон умеет исполнять пользовательские скрипты, но вот беда (та же беда и с OpenVPN), если в скрипте написать что-то типа echo "У нас изменились параметры, шеф, все пропало" это сообщение в лучшем случае уйдет неведомо куда. В худшем — вылезет пользователю, из под которого стартует демон, посреди рабочего сеанса в консоль.

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

Не так давно я делал похожего пользователя для отключения/перезагрузки сервера [КОПИЯ] . Фактически, пользователю была установлена псевдооболочка (на самом деле просто скрипт), выполняющий единственную команду перезагрузки/отключения системы. И идея создания псевдооболочек меня зацепила. Таким образом можно дать пользователю выполнять только ограниченный набор команд, да еще и обрабатывать параметры в скрипте по-своему, так что никакой злоумышленник, даже получив доступ по ssh ничего сделать не сможет, т.к. команды псевдооболочки ему неизвестны.

Почему бы не использовать такой способ и для целей мониторинга?

Создание пользователя

Первым делом создаем отдельную группу:
groupadd monusers
где monusers — любое название группы на ваш вкус, ранее в системе не существующее

Создаем пользователя:
useradd -g monusers -d /home/meteomon -s /home/meteomon/monitor.sh meteomon

где:
-g monusers группа пользователя (ранее созданная monusers)
-d /home/meteomon домашний каталог пользователя
-s /home/meteomon/monitor.sh — псевдооболочка для пользователя, скрипт, обрабатывающий команды.
meteomon — имя пользователя

Задаем пользователю пароль (иначе не сможем залогиниться по ssh):
passwd meteomon

Создаем домашний каталог:
mkdir /home/meteomon

Меняем владельца каталога на пользователя meteomon:
chown meteomon:monusers /home/meteomon

Меняем права доступа на каталог:
chmod 500 /home/meteomon

Создаем в домашнем каталоге скрипт monitor.sh о содержимом скрипта ниже.

Меняем владельца и права доступа для скрипта monitor.sh
chown meteomon:monusers /home/meteomon/monitor.sh
chmod 500 /home/meteomon/monitor.sh

Скрипт-псевдооболочка

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

#!/bin/bash

echo "Hi, monitor operator"
echo "To exit enter byebye"

while [ "$KEYINPUT" != "byebye" ]; do
    read KEYINPUT
done

Все просто — ввод с клавиатуры попадает в переменную KEYINPUT и пока она не равна byebye скрипт выполняется. Как только пользователь введет byebye, так прервется цикл, скрипт завершит работу, и пользователь автоматически выйдет из системы.

Отправка сообщений пользователю

Для отправки сообщений пользователю используем связку команд echo и write
Можно создать отдельный скрипт со следующим содержимым:

#!/bin/bash

USERNAME="meteomon"

echo -e $1|write $USERNAME 2>/dev/null

положить его в каталог с доступными пользователям скриптами (например в /usr/sbin) и установить права доступа, например в 755, чтобы пользователь для мониторинга мог получать сообщения от всех пользователей системы.

Примечание: параметр -e команды echo позволяет использовать специальные символы, такие, как перенос строки \n, а конструкция 2>/dev/null отправляет в нуль-устройство сообщение об ошибке, которое может возникнуть, если пользователь meteomon не вошел в систему.

Использование

Осталось прописать соответствующую команду в пользовательском скрипте, вызываемом демоном, или исполняемом по cron’у:

...
DATA=`meteosrv checksystem`
/usr/sbin/techo $DATA
...

Внимание! Читайте документацию по демону, можно случайно нарваться на подводный камень, например, OpenVPN в некоторых случаях болезненно относится к ошибкам, случающимся в пользовательских скриптах.

Настройка рабочего места оператора

Для Windows понадобится утилита plink, обычно она идет вместе с ssh-клиентом PuTTY. В каталоге с ней создаем bat-файл следующего содержания.

testmon.bat:
plink -ssh -P 22 -l meteomon -pw meteomonpass 192.168.0.40

где вместо meteomon надо подставить имя пользователя для мониторинга, вместо meteomonpass — заданный пароль, а вместо 192.168.0.40 настоящий адрес удаленного компьютера.

Вот что получилось

Источники

1. Bash, команда write

Форма обратной связи для WordPress, без плагина.

Пост из серии «кратенькая инструкция от склероза», описываю больше для себя, как форма сделана на моем сайте. Мопед не мой, но найти, откуда взята сия метода, не смог.

0. Создаем новую страницу, озаглавливаем ее согласно случаю, например Обратная связь, устанавливаем простое и понятное название постоянной ссылки, например contact-form, вставляем в редакторе в режиме Текст вот этот вот html-код. Не забудьте заменить beach на название директории с вашей темой. Пока ничего работать не будет, но «болванка» странички с формой обратной связи готова, осталось лишь научить сайт обрабатывать запрос, отправленный из формы.
1. Нам понадобится php-скрипт, отправляющий почту. Создаем файл mail.php, вставляем код, который откроется по ссылке, и копируем файл по FTP в директорию темы (wp-content/themes/ваша-тема).
В исходнике mail.php надо заменить admin-vnc@uaitc.fi на тот e-mail, на который вы хотите получать сообщения, отправленные из этой формы и указать в строке
header( 'Refresh: 3; url=http://tolik-punkoff.com/obratnaya-svyaz/' ); нужный адрес, куда пользователь будет перенаправлен после отправки сообщения. Число (в данном случае 3) — время перед перенаправлением. Фактически время, которое пользователю будет отображаться сообщение об успехе, либо об ошибке при отправке сообщения.
2. Сохраняем два изображения, valid.png:


и invalid.png:

в директорию images темы (wp-content/themes/ваша-тема/images).
3. Добавляем в файл style.css темы вот этот вот код css
4. Осталось проверить, все ли работает и добавить ссылку на страницу в соответствующее меню.

Вот что должно получиться

ФАНФАРЫ!

Все необходимое в одном архиве (на mega.nz)
Нашел оригинальный архив (скачать с mega.nz)