Курочка открыла дверь в Карелии.

И теперь едет открывать ее в Финляндии.

«Курочка, открой дверь», это тебе не простая крипипаста про деревню. Тут и непонятной природы сущности, и странные секты, и спецслужбы, тайное российское, а возможно и мировое правительство. Даже отряд казаков встречается.

В общем, если бы Стивен Кинг и Виктор Пелевин писали сценарий к Евангелиону, примерно оно бы и вышло.

Думаю, вообще, произведение недооцененное, по причине «камерности» и совсем никакого пиара, Раймонду Крумгольду должно было бы зайти. И вообще, по повести аниме надо снимать, а уж статья на Катабасии обязательна вообще.

Книга с «Курочкой» и еще несколькими рассказами того же автора, вновь вышла ограниченным тиражом. Мы ждали этого джва минимум 5 годиков.

Текст и озвучка доступны в сети бесплатно:

Текст на Мракопедии
Озвучка от Криперс

Заказать книжку, если кому надо, и если осталось, можно в описании под озвучкой.

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

Преамбула

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

Что умеет

+ Последовательно проводить два вида тестов: ping и получение страницы (или файла) с web-сервера
+ Оповещать пользователя об ошибках или пройденных тестах, с цветным текстом.
+ Выдавать звуковые сигналы об успешном завершении теста, или об ошибке на PC-speaker.

Для звуковых оповещений должен быть настроен PC-speaker и установлена утилита beep (копия).

Последовательность операций задается в конфигурационном файле.

Конфигурационный файл

Конфигурационный файл состоит из строк следующего формата:

операция|адрес|отображаемое описание|прервать/игнорировать

Пока поддерживаются только две операции:

ping — для ping’а адреса
getp — для получения страницы или файла с WEB-сервера (с помощью wget)

адрес — адрес, WWW для getp, IP или WWW для ping.

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

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

Названия операций и break нечувстивительны к регистру (т.е. можно написать Ping, ping или Getp, GeTP или BreaK, breaK).

Первые два поля (операция и адрес) являются обязательными. Если они не будут указаны, скрипт будет прерван на строке с ошибкой:

...
Ping|192.168.0.1|Main router|break #Main router ping
ping|[ДАННЫЕ УДАЛЕНЫ]|Provider IP|break
getp
...

Если не будет указано поле описания, то оно будет по умолчанию установлено в значение No desription:

Если последнее поле не будет заполнено, то оно принимает значение break.

Если в первом поле будет неверно указанный код операции, то скрипт его проигнорирует, выдав соответствующее сообщение, продолжит выполнять другие операции, но завершится с ошибкой:

Ping|192.168.0.1|Main router|break #Main router ping
ping|[ДАННЫЕ УДАЛЕНЫ]|Provider IP|break
getp|[ДАННЫЕ УДАЛЕНЫ]|Provider page
1234|[ДАННЫЕ УДАЛЕНЫ]|VPN Server IP|break
ping|8.8.8.8|Internet IP|break
getp|google.com|Internet page|break

Для разделения полей используется символ |

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

Пример конфигурационного файла (без данных)

#inettest.cfg example

Ping|192.168.0.1|Main router|break #Main router ping
ping|x.x.x.x|Provider IP|break #Change x.x.x.x to your provider ip
getp|myprovider.net|Provider site page|skip #change myprovider.net to real site your provider
ping|x.x.x.x|VPN Server IP|break #Change x.x.x.x to real VPN provider IP
ping|8.8.8.8|Internet IP|break
getp|google.com|Internet page|break

Переменные скрипта

Скрипт не имеет параметров командной строки, основные настройки осуществляются через переменные самого скрипта:

CONFIG — путь к конфигурационному файлу, например CONFIG="./inettest.cfg". Если конфигурационный файл не будет найден, скрипт выдаст ошибку:

CRITICAL ERROR: Config file ./inettest.cfg not exist!

NOCOLOR — если значение равно 0, включить вывод цветного текста на консоль, если 1 — отключить. По умолчанию 0

NOCOLOR=1:

NOSOUNDP — включение ( по умолчанию 0) или отключение (1) звука в процессе тестов. Звук выдается после каждого отдельного теста.
NOSOUNDF — аналогично предыдущей переменной, только звук звучит после окончания всех тестов или их прерывания.

NOADDR0, включить тестируемый адрес в вывод скрипта, 1 — не включать.

NOADDR=0:

NOADDR=1:

PACKETS — количество пакетов для команды ping (по умолчанию PACKETS=3)
TIMEOUT — тайм-аут для получения страницы или файла (в скрипте делается с помощью wget, по умолчанию TIMEOUT=5)

Тест при ошибке сети

Конфиг:

Ping|192.168.0.1|Main router|break #Main router ping
ping|[ДАННЫЕ УДАЛЕНЫ]|Provider IP|skip
getp|[ДАННЫЕ УДАЛЕНЫ]Provider page|skip
ping|[ДАННЫЕ УДАЛЕНЫ]|VPN Server IP|break
ping|8.8.8.8|Internet IP|break
getp|google.com|Internet page|break

Результат:

Коды ошибок

ping:
1 — No reply (не один из пакетов до пингуемого адреса не дошел)
2 — Other error (другая ошибка, в большинстве случаев — «сеть недоступна»).

getp (wget):
1 — Иная / общая ошибка (generic error code)
2 — Ошибка в параметрах командной строки или файлах конфигурации (.wgetrc или .netrc)
3 — Ошибка файлового ввода/вывода (I/O error)
4 — Ошибка сети (например, при обрыве связи)
5 — Ошибка SSL
6 — Ошибка идентификации (неправильное имя пользователя или пароль)
7 — Ошибка протокола
8 — Ошибка сервера (например, нужный файл на сервере не найден, ошибка 404)

Коды возврата скрипта

0 — Ошибок в ходе тестов не произошло.
1 — Произошла хотя бы одна ошибка.

Скачать

Репозиторий на GitHub

(Ч)мобик.

Вчера поехал в город, че-то захотелось вкусьненького, решил посетить ресторацию.

На такси обратно жаба задавила ехать, пошел на маршрутку до Бесовца, на останiвке (кто понял, тот понял) стоит чмобик, и кому-то бурно рассказывает по телефону:

— Да, еду. Вот через неделю уже еду, на фронт.
— Я же сержант медицинской службы.
— Да у меня экипировка будет, я же спонсора нашел. Осталось бронепластины купить.
— Дык мой генеральный [директор] тоже патриот, он мне все купит.

Хотелось, конечно, спросить, какие бронежилеты помогают от Хаймарса, но я вслушивался в важный разговор, чтобы понять, какой мудак его спонсирует. Жаль, название фирмы так и не было произнесено, иначе б я похвастался, что пополнил (в очередной раз) базу «Миротворца».

ЗЫ. Вот Мырзин мучительно отказывается от работы на СБУ, хотя ему настойчиво предлагали, а мы аж всей компанией хотим, и даже может че-то можем, хотя нас два околоайтишника, один айтишник, графоман и ветеринарша, но нам не предлагают.

ТрусЫ, история друга про военкомат.

Я ограниченно годен ([ДАННЫЕ УДАЛЕНЫ] психиатрическая болезнь), воевать могу, но если таблетки есть, если кончатся, могу воевать с чертями, лешими и сослуживцами. Диагноз был древний, как говно мамонта, так что к 15 годам (первая медкомиссия) военкомата я абсолютно не боялся, так что вот вам первая прикольная история.

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

— А ты почему до трусов не разделся?

И это «ты» меня перемкнуло.

— Во-первых, не «ты», а «вы», я к вам на «вы», уважительно, а вы мне «тыкаете».

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

— Во-вторых, предоставьте мне закон, по которому я должен быть тут в трусах! Номер федерального закона, конкретный пункт. Если он есть, я сниму штаны, если нет, то вы не должны от меня это требовать!

Дяденька, наконец, нашелся (хоть как-то):

— Ну все стоят в трусах.
— Ну и пусть стоят, их личное дело.

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

— Ты че тут, самый умный?
— Ну не дурак, наверное. Городскую олимпиаду по биологии взял. Может, на районную поеду. И кстати, представьтесь пожалуйста, я вот [ДАННЫЕ УДАЛЕНЫ], а вы? Имя, фамилия, должность, звание?

Тут дяденька резко развернулся и скрылся в неизвестном направлении.

А первую комиссию я так в штанах и прошел.

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

Linux: как проверить в скрипте, пингуется ли адрес.

Оказалось все очень просто.

ping <ip|url> -c <packets_count>

где:
<ip|url> — IP или URL адрес
ip — IP-адрес (например 8.8.8.8 или 192.168.0.1)
url — URL-адрес (например google.com)
<packets_count> — количество отправленных пакетов

В следующем примере мы пингуем google.com:

ping google.com -c 3

Вывод команды приводить не буду для экономии места, кому нужно, смотрите на PasteBin

Можно пропинговать и по IP, например, локальный роутер:

ping 192.168.0.1 -c 3

Вывод, опять же на PasteBin

Внимание! Количество отправленных пакетов (-с <число>), если вы используете ping в скрипте bash нужно указать обязательно, иначе команда ping никогда не прекратит свою работу и завесит скрипт, в отличии от команды ping в Windows (она по умолчанию посылает 5 пакетов и прекращает работу).

Коды возврата ping

Естественно, для анализа работы ping в скрипте, нам потребуются коды возврата.

К сожалению, в официальном man для команды ping их, почему-то забыли указать.

0 — Success (хоть один из пакетов дошел до адреса)
1 — No reply (не один из пакетов до пингуемого адреса не дошел)
2 — Other error (другая ошибка, в большинстве случаев — «сеть недоступна»).

На всякий случай

Если произошла ошибка с кодом 2, то команда ping выводит на stderr сообщение об ошибке, например:

ping 8.8.8.8 -c 3
connect: Network is unreachable

Отключение вывода

ping является полуинтерактивной командой, и показывает параметры отправленных пакетов (см. на PasteBin), если это не нужно, можно отключить вывод стандартным способом, перенаправив вывод команды ping из stdin и stderr в /dev/null, например:

ping 8.8.8.8 -c 3 >/dev/null 2>/dev/null

где:
>/dev/null — перенаправление stdin в нуль-устройство
2>/dev/null — перенаправление stderr в нуль-устройство

Пример

Простейшее использование команды ping в скрипте:

#!/bin/bash

#testping
# $1 - IP or URL address

ping $1 -c 3 >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
    echo "Pinging!"
else
    echo "Not pinging!"
fi

Копия на PasteBin

Проверка

smallwolfie@wolfschanze:~/nettest$ ./testping 8.8.8.8
Pinging!
smallwolfie@wolfschanze:~/nettest$ ./testping 666.666.666.666
Not pinging!
smallwolfie@wolfschanze:~/nettest$ ./testping 192.168.0.55
Not pinging!
smallwolfie@wolfschanze:~/nettest$ ./testping example.org
Pinging!