Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

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

подробнее

Отсюда следует важное отличие от C: если там «истинным» в управляющих конструкциях считается выражение больше нуля, то в скриптах это, напротив, нуль, поскольку именно он является индикатором успешного завершения программы.

Вместе с тем синтаксис управляющих конструкций в целом похож. Сильно отличается разве что цикл for, в котором присутствует конструкция «variable in word ...», позволяющая одинаково легко пройтись по всем файлам каталога, заменив «word» на «*» (при этом «variable» последовательно принимает значение имени каждого файла), или, как в нашем случае, перебрать все поля списка, записанного в переменную.

Выражение типа [ $string ] истинно, если строка не пустая. Цикл с [ ! ] в качестве параметра бесконечный, прервать его можно командой break.

Пример непосредственного использования кода завершения программы – запуск ps с параметром номера родительского процесса, $PPID. После остановки родительского процесса (ps не может его найти) скрипт завершается.

И наконец, eval служит здесь для объединения вывода двух скриптов в один поток для последующей передачи tee, которая дублирует входной поток в указанный файл и в выходной поток, который diff затем сравнивает с ранее сохраненным файлом, показывая только изменения.

В скрипте count_pppd список пользователей, полученный от who, преобразуется к виду «user ttyname», который затем в цикле передается read. Назначение read – считывать в переменные строки, разделителями полей в которых служат пробелы (или содержимое переменной IFS, если она установлена).

Для того чтобы использовать такую переменную в awk, необходимо сначала присвоить ее значение внутренней переменной awk, конструкция user=$user означает именно это. Ключ -F меняет значение разделителя полей по умолчанию.

Несколько более сложная конструкция «if(substr ($2,1,4)=="cuaa")» используется, чтобы выбрать пользователей, зашедших по удаленному доступу. В данном случае именно с помощью awk сделать это проще всего, тогда как для grep потребовалось бы довольно сложное регулярное выражение.

В качестве проверки каждый из приведенных скриптов можно запустить по отдельности, результаты своей работы они выдают на стандартный вывод. Скрипт count_user реализует требуемый протокол и отвечает на вопросы «когда, кто, откуда». Это само по себе уже представляет некоторый интерес (не нужно анализировать логи отдельных приложений, чтобы ответить на этот вопрос), но в первоначальной постановке задачи основным вопросом было «сколько». Для ответа на этот вопрос недостаточно просто добавить правила в таблицу ipfw, потребуется организовать взаимодействие между ipfw и ipa.

В простейшем случае направление подсчета будет только одно, а значит, достаточно одного правила ipa с одним правилом ipfw внутри (их может быть и больше) на одного пользователя. Очень часто это направление подсчета – входящий трафик из внешней сети к пользователю (количество выкачанных страничек, музыки и проч.).

В расчете на одного пользователя эта часть конфигурации ipa получится такой:

rule username {

    ipfw = 32001

}

Номер около 32000 взят неслучайно. Всего в ipfw может быть до 65535 правил (последнее – всегда правило по умолчанию) и этот номер находится примерно посередине таблицы.

Скрипт, организующий взаимодействие между ipfw и ipa, в основном выполняет следующую функцию: сопоставление имени пользователя (а значит, и имени правила ipa) с номером правила ipfw. Поскольку конфигурация ipa содержит такое сопоставление, логично производить его на основе этой конфигурации, то есть на ее основе при известном имени пользователя получать его номер.

#!/bin/sh

 

bindir=$(dirname $0) || exit 1


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100