Анализируем трафик с Nulog2 Сергей Яремчук $ uname -r $ grep -i ulog /usr/src/linux/.config CONFIG_BRIDGE_EBT_ULOG=m CONFIG_IP_NF_TARGET_ULOG=m $ lsmod | grep –i ulog $ sudo apt-cache showpkg ulogd | grep -i versions $ sudo aptitude install ulogd ulogd-mysql [global] # Файл журнала и уровень журналирования logfile="/var/log/ulog/ulogd.log" # debug(1), info(3), notice(5), error(7) or fatal(8) # Вначале лучше поставить 1, а затем после полного # прогона переключить на 5 loglevel=1 # Плагины вывода # Текстовый формат plugin="/usr/lib/ulogd/ulogd_LOGEMU.so" # Для вывода в MySQL, пока отключаем #plugin="/usr/lib/ulogd/ulogd_MYSQL.so" # Параметры вывода для разных плагинов # Текстовый [LOGEMU] file="/var/log/ulog/syslogemu.log" # Подключение к MySQL [MYSQL] table="ulog" pass="pass" user="user" db="ulogd" host="localhost" iptables -A FORWARD $FILTER -j LOG iptables -A FORWARD $FILTER -j ULOG # set to yes to start on boot ENABLED=no ENABLED=yes $ cat /etc/ufw/after.rules ... # catchall for logging -A ufw-after-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK INPUT]: " -A ufw-after-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK FORWARD]: " -A ufw-after-input -m limit --limit 3/min --limit-burst 10 -j ULOG --ulog-prefix "[UFW BLOCK INPUT]: " -A ufw-after-forward -m limit --limit 3/min --limit-burst 10 -j ULOG --ulog-prefix "[UFW BLOCK FORWARD]: " $ sudo ufw logging on $ sudo iptables -L -n | grep ULOG $ sudo /etc/init.d/ulogd restart $ tail -f /var/log/ulog/syslogemu.log $ sudo apt-get install python2.4 python-twisted python-nevow python-matplotlib gettext python-soappy python-mysqldb python-cairo python-ipy python-numpy python-docutils $ mysql -uroot -prootpassword > CREATE DATABASE ulogd; > GRANT ALL PRIVILEGES ON ulogd.* TO 'user'@'localhost' IDENTIFIED BY 'pass'; $ mysql -uuser -ppass ulogd < ./scripts/ipv4.sql $ mysql -uroot -ppass ulogd < ./scripts/triggers.py DROP TRIGGER IF EXISTS update_cache; $ sudo /etc/init.d/ulogd restart $ sudo ./setup.py install $ make [server] port=8080 vardir = /var/lib/nucentral/ address = 0.0.0.0 # список модулей [modules] nulog-core=yes nulog-web=yes auth=yes $ ./script/install_defconf.sh # Database configuration [DB] host=localhost db=ulog user=user password=pass # Тип БД mysql/pgsql dbtype=mysql # Тип sql scheme ulog/triggers type=triggers ip=4 table=ulog # URL для доступа к основной странице url=/nulog/ # Заголовок веб-страницы maintitle=Log ULOG # Использование Nuface2 ACLs # nuface_acl=https://localhost/nuface/%%s.php?acl=%%s [Sessions] # разрешение на анонимное подключение anonymous=yes [Misc] # формат даты datetime=%%y-%%m-%%d %%H:%%M:%%S # Интеграция с панелью дистрибутива Edenwall # (http://www.edenwall.com), можно просмотреть в NuFW.Live edenwall_integration=0 $ sudo cp –v ./debian/init.d /etc/init.d/nulog $ sudo ln –s /etc/init.d/nulog /etc/rcS.d/nulog $ sudo /etc/init.d/nulog restart $ sudo twistd -noy /usr/sbin/nulog.tac ServerName nulog ProxyPreserveHost Off ProxyPassReverse /nulog http://localhost:8080/nulog Allow from all AuthType Basic AuthName nulog AuthUserFile /etc/apache2/users AuthBasicProvider file Require valid-user RewriteEngine on RewriteCond %{LA-U:REMOTE_USER} (.+) RewriteRule /nulog(.*) http://localhost:8080/nulog$1 [P,E=RU:%1] RewriteRule /nulog(.*) http://localhost:8080/nulog$1 [P] RequestHeader set Nulog_User %{RU}e RequestHeader unset Authorization stack=log1:NFLOG,op1: LOGEMU $ ./configure $ make $ sudo make install $ sudo aptitude install libmysqlclient15-dev $ sudo apt-get install autoconf automake1.9 libtool $ svn co https://svn.netfilter.org/netfilter/branches/ulog/ulogd2 $ cd ulogd2 ~/ulogd2$ ./autogen.sh; ./configure; make; sudo make install $ sudo cp -v ulogd.conf /usr/local/etc/ulogd.conf $ sudo cp -v ulogd.logrotate /etc/logrotate.d/ulogd $ sudo cp -v ulogd.init /etc/init.d/ulogd $ sudo ln –s /etc/init.d/ulogd /etc/rcS.d/S99ulogd $ sudo /usr/local/sbin/ulogd ----------------------------------------------------------------------------------------------------------------- Автоматическая установка драйверов Иван Коробко rundll32.exe DLL,Function Рarameters Листинг 1. Установка драйверов с помощью интерпретатора SETUPAPI rundll32.exe setupapi,InstallHinfSection HP_1200_PPD 132 C:\HP_1200.INF Листинг 2. Установка драйверов с помощью интерпретатора SETUPAPI rundll32.exe advpack,LaunchINFSection C:\HP_1200.INF HP_1200_PPD 132 Листинг 3. XML-файл, для автоматической установки DPInst .exe / S /LM Листинг 4. Установка найденных драйверов в подпапках * Листинг 5. Шаблон файла DPInst.XML ... ... ----------------------------------------------------------------------------------------------------------------- Вы еще не используете Windows Vista? Андрей Бирюков net stop uxsms net start uxsms ----------------------------------------------------------------------------------------------------------------- Оптимизируем PPD-файлы Иван Коробко Листинг 1. Шаблон INF-файла стандартного PS-драйвера [Version] Signature="$Windows CHICAGO$" ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318} Class=Printer Provider="temp" [Manufacturer] %Company%=firm [firm] "Product Name" = **********, unique_identifier [**********] CopyFiles=@*****.PPD,PSCRIPT_NT ; PPD-файл. DataSection=PSCRIPT_DATA DataFile=*****.PPD Include=NTPRINT.INF ; инсталляция NTPRINT.INF. Needs=PSCRIPT.OEM ; инсталляция PSCRIPT. [DestinationDirs] DefaultDestDir=66000 [SourceDisksNames] 1 = "HP",,,"" [SourceDisksFiles] HP1200.ppd = 1,,,,,,,11,3 [Strings] Company = "Firm Name" *command:value Листинг 2. Типичный заголовок PPD-файла *PPD-Adobe: "4.3" *% ====================================================== *% Printer Description File *% Copyright 1992-2001 Hewlett-Packard Company *%======================================================= *% PPD for HP LaserJet 1200 Series *%======================================================= *% === PPD File Version Information ==== *FileVersion: "1.004" *FormatVersion: "4.3" *LanguageEncoding: ISOLatin1 *LanguageVersion: English *PCFileName: "HP1200_7.PPD" *% === Product Version Information ==== *ModelName: "HP LaserJet 1200 Series" *ShortNickName: "HP LaserJet 1200 Series PS" *NickName: "HP LaserJet 1200 Series PS" *Product: "(HP LaserJet 1200 Series)" *Manufacturer: "HP" *PSVersion: "(2014.108) 1" Dup [x y] string Put Листинг 3. Описание поддерживаемых форматов бумаги *?PageSize: " save currentpagedevice /PageSize get aload pop 2 copy gt {exch} if (Unknown) 17 dict dup [612 792] (Letter) put dup [522 756] (Executive) put dup [612 1008] (Legal) put dup [595 842] (A4) put dup [420 595] (A5) put dup [297 420] (A6) put dup [499 709] (ISOB5) put dup [516 729] (B5) put dup [612 936] (w612h936) put dup [284 419] (Postcard) put dup [419.5 567](DoublePostcard) put dup [297 684] (Env10) put dup [279 540] (EnvMonarch) put dup [312 624] (EnvDL) put dup [459 649] (EnvC5) put dup [499 709] (EnvISOB5) put dup [558 774] (w558h774) put { exch aload pop 4 index sub abs 5 le exch 5 index sub abs 5 le and {exch pop exit} {pop} ifelse } bind forall = flush pop pop restore " *End Листинг 4. Описание поддерживаемых форматов бумаги *?PageSize: " save currentpagedevice /PageSize get aload pop 2 copy gt {exch} if (Unknown) 2 dict dup [595 842] (A4) put dup [284 419] (Postcard) put { exch aload pop 4 index sub abs 5 le exch 5 index sub abs 5 le and {exch pop exit} {pop} ifelse } bind forall = flush pop pop restore " *End Листинг 5. Описатели формата бумаги *PageRegion string1/string2: " <> setpagedevice" *End Листинг 6. Назначение формата бумаги по умолчанию *OpenUI *PageSize: PickOne *OrderDependency: 30 AnySetup *PageSize *DefaultPageSize: Letter *PageSize Letter/Letter: " <> setpagedevice" *End …… ----------------------------------------------------------------------------------------------------------------- Управляем объектами в Active Directory. Часть 4 Иван Коробко Листинг 1. Создание учетной записи группы set RootDSE = GetObject("LDAP://RootDSE") Domain = rootDSE.Get("defaultNamingContext") Set objUsers = GetObject("LDAP://OU=WorkGroup," & Domain) Set objNewUser = objUsers.Create("group", "cn=Test") objNewUser.Put "sAMAccountName", "Test" objNewUser.Put "groupType", "-2147483646" objNewUser.SetInfo Листинг 2. Удаление учетной записи группы set RootDSE = GetObject("LDAP://RootDSE") Domain = rootDSE.Get("defaultNamingContext") Set objUsers = GetObject("LDAP://OU=WorkGroup," & Domain) objUsers.delete "group", "cn=Test" Set objUsers = nothing Листинг 3а. Получение списка членов группы (стандартный вариант) path = … Set objGroup = GetObject("LDAP:// " & path) temp = "" For Each obj In objGroup.member temp = temp + obj + vbNewLine Next MsgBox temp Листинг 3б. Получение списка членов группы (улучшенный вариант) path = … Set objGroup = GetObject("LDAP:// " & path) For Each obj In objGroup.member temp = temp + GetObject("LDAP:// " & ? obj.cn) + vbNewLine Next MsgBox temp Листинг 4а. Добавление объектов в группу path = … objPath=… Set objGroup = GetObject("LDAP:// " & path) objGroup.Add("LDAP:// " & objPath) Листинг 4б. Удаление объектов из группы path = … objPath=… Set objGroup = GetObject("LDAP:// " & path) objGroup.Remove("LDAP:// " & objPath) ----------------------------------------------------------------------------------------------------------------- Контролируем изменения в конфигурационных файлах Владимир Легеза $ hg --version $ id $ echo >~/.hgrc< [ui] > editor = vim > fallbackencoding = UTF-8 > username = John Doe EOF $ su # id # who am i # hg init / # chmod 700 /.gh # ls -ld /.hg # cp hglock /usr/bin/ # cat >>/.hg/hgrc< [hooks] > port-commit = hglock -C > post-add = hglock -A > EOF # echo `^` >/.hgignore # hg add /etc/inet/hosts # hg add /usr/local/apache2/conf/httpd.conf # hg add /var/spool/cron/crontabs/root # hg status # cat /.hg/locksfile # hg commit -m "Init" # cat /.hg/locksfile # hg locate # hg root # hglock /etc/inet/hosts # hglock /etc/inet/hosts # cd /etc/inet # sed –e "s/oldalias/newalias/" hosts > /tmp/1 # mv /tmp/1 hosts # hg status # hg commit –m "first change" /etc/inet/hosts # cd /etc/inet # hg log hosts # hg diff -r 0 -r 1 # rm hosts # hg log hosts # hg cat -r 1 hosts > hosts # cat hosts ----------------------------------------------------------------------------------------------------------------- Lustre FS. Настраиваем и используем кластерную систему в промышленных масштабах Часть II Виталий Банковский tar -xzvf drbd-8.2.7.tgz make KDIR=/usr/src/linux make tools make install make install-tools # название нашего ресурса (диска) resource r0 { # Синхронный протокол репликации protocol C; # Временные настройки startup { wfc-timeout 0; degr-wfc-timeout 120; } # Отключать ресурс в случае сбоя диска disk { on-io-error detach; } # Ограничение скорости передачи данных между серверами Slave и Master syncer { rate 10M; } # Описание подсистемы на oss1-a on oss1-a1.domain.com { # Путь к устройству хранилища DRBD device /dev/drbd1; # Путь к физическому диску, где будут храниться # метаданные и сами данные сервиса DRBD disk /dev/hda7; # IP-адрес первого сервера address 10.40.10.10:7791; # Указание, где будут храниться метаданные сервиса DRBD. # В данном случае я использовал внутренний объем # раздела, где хранятся данные. meta-disk internal; } } on oss1-b.domain.com { device /dev/drbd1; disk /dev/sda7; address 10.40.10.11:7791; meta-disk /internal; } /etc/init.d/drbd start drbdadm create-md r0 drbdadm attach r0 drbdadm connect r0 drbdadm -- --overwrite-data-of-peer primary r0 drbdadm adjust r0 cat /proc/drbd mkfs.lustre --reformat --ost --fsname=webstorage --mgsnode= mds.domain.com@tcp0 /dev/drbd1 tar -xvf STABLE-2.1.4.tar cd Heartbeat-STABLE-2-1-STABLE-2.1.4 ./ConfigureMe configure make make install adduser hacluster groupadd haclient cp /usr/src/drbd-8.2.7/scripts/drbddisk /usr/local/etc/ha.d/resource.d/ # Порт, на котором будут приниматься сообщения от других серверов udpport 694 # Способ оповещения других серверов. В данном случае — broadcast через интерфейс etho bcast eth0 # Не использовать формат XML для настройки ресурсов. # Использовать текстовый формат настроек crm no # Список серверов node oss1-a.domain.com node oss1-b.domain.com # Временные настройки keepalive 1 deadtime 3 hopfudge 1 # Включение режима failover auto_failback on # Включить использование системного syslog для лог-файлов use_logd on oss1-a.domain.com 10.40.10.12/25/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/mnt/ost1::lustre auth 1 1 sha1 your_password_here auth 1 1 md5 my_god_password_nobody_will_know chmod 600 /etc/ha.d/authkeys /etc/init.d/heartbeat start mount | grep drbd mount | grep drbd chkconfig drbd on chkconfig heartbeat on ----------------------------------------------------------------------------------------------------------------- Квартет: «САМО», «1C», wine и Etersoft Сергей Барановский # yum install wine $ pwd $ wine ./1cv7s.exe $ wget http://kegel.com/wine/winetricks $ sh ./winetricks yum install cabextrac t $ sh ./winetricks $ wine ./1cv7s.exe //192.168.0.1/base_1c /base_1c cifs auto,rw,username=1c,password=xxx,uid=500,gid=500 0 0 #mount | grep 1c $ wget http://updates.etersoft.ru/pub/Etersoft/WINE@Etersoft/1.0.9/CIFS/Fedora/8/etercifs-4.0.0-eter2fedora.noarch.rpm # rpm -ihv etercifs-4.0.0-eter2fedora.noarch.rpm # /etc/rc.d/init.d/etercifs build # lsmod |grep cifs # rmmod cifs # umount /base_1c # rmmod cifs # /etc/rc.d/init.d/etercifs start # lsmod |grep cifs # mount -t cifs -a # chkconfig etercifs on $ ln -s /base_1c d: [Server1c] host = 192.168.0.1 port = 1433 tds version = 8.0 client charset = WINDOWS-1251 [FreeTDS] Description=FreeTDS for MSSQL Driver=/usr/lib/libtdsodbc.so.0 [serv] Driver = FreeTDS Description = 1C_base Trace = No Servername = Server1c Database = base_1c # odbcinst -i -d -f tds.driver.template $ odbcinst -i -s -f tds.datasource.template 192.168.0.1 serv $ ping -c3 serv $ wine ./1cv7s.exe $ sh ./winetricks # yum remove wine wine-core # rpm -ihv wine-1.0.9-eter37fedora.i586.rpm wine-etersoft-sql-1.0.9-eter15fedora.i586.rpm Процедура ПоКнопкеВорд() Знак = "0"; Если СокрЛП(ИмяФайла)<>"" Тогда Состояние("Выполняется подключение к шаблону MS Word..."); Word=СоздатьОбъект("Word.Application"); Word.Documents.Add(ИмяФайла); Word.Selection.GoTo(-1,,, "ДатаСозданияПутёвки"); Word.Selection.Delete(2,1); ..... Word.Selection.GoTo(-1,,, "Сумма2"); Word.Selection.Delete(2,1); Word.Selection.TypeText(Строка(Формат(ТурОбслуживание1_ВвалютеКОплате,"Ч15.2,")) + " "); //Word.Selection.TypeText (Строка(ТурОбслуживание1_ВвалютеКОплате) + " "); Word.Visible=1; Иначе Предупреждение("Укажите имя файла Word !"); КонецЕсли; КонецПроцедуры ----------------------------------------------------------------------------------------------------------------- Исследование уязвимостей с помощью Metasploit Framework Павел Троицкий rpm -ihv *.rpm yum install ... # service httpd stop # /etc/rc.d/init.d/httpd stop # iptables -I INPUT -i eth0 -p tcp –sport 1024:65535 –dport 8081 -j ACCEPT # iptables -I OUTPUT-o eth0 -p tcp –dport 1024:65535 –sport 8081 -j ACCEPT ----------------------------------------------------------------------------------------------------------------- JQuery: магия JavaScript Александр Слесарев Jquery

Координаты выделения:
X1:
Y1:
X2:
Y2:

Размеры выделения:
Width:
Height:

//Код: jQuery('div.panel'); //Эквивалентен коду: $('div.panel'); jQuery.noConflict(); (function($) { // Внутри этого блока $ относится к jQuery })(jQuery); $(document).ready(function() { //Ваш код }); $('.block'); $('p#plain'); $('div#content a:visible'); $('table.orders tr:odd'); $('input[@name=email]'); $('a[@href^="http://"]'); $('p[a]'); $('div#container p/span'); $('div#block').width(300); $('p.title').css('color', '#ff0000'); $('li:odd').css({color: 'white', backgroundColor: 'black'}); $('a[@href^="http://"]').addClass('external').attr('target', '_blank');\ $('span').each(function(el){alert($(this).text())}); $('a').html('Нажми здесь!'); var width = $('div').width(); var src = $('img').attr('src'); var color = $('h1').css('color'); $('p')[0].className = "myclass"; $('p').each( function(){ //Действия над элементом } ); Jquery Run!
animate(params, speed, easing, callback); for(var i = 0; i < 10; i++){ $('mydiv').animate({opacity: 'hide'}, 300); $('mydiv').animate({opacity: 'show'}, 300); } jQuery
Go
jQuery.fn.myplugin = function() { alert("Мой плагин!"); return this; }; jQuery.fn.myplugin = function() { alert("Мой плагин!"); return this; }; Теперь вернемся к нашей тестовой странице и создадим в ней код: jQuery
$("#mydiv"). myplugin( { key: "action", value: "test" } ); $.extend(target, property1, ..., propertyN) jQuery.fn.myplugin = function(options) { // Начальные параметры var settings = {default: "Мой плагин!", value: ""}; // Замена параметров settings = jQuery.extend(settings, options); // Вывод новых значений if(settings.value == "") alert("Значение по умолчанию: " + settings.default); else alert("Полученное значение: " + settings.value); return this; }; $("#mydiv").myplugin({value: "Новое значение"}); $.post(url[, params[, callback]]) $.get(url[, params[, callback]]) $.post( '/test.php', { action: 'news', id: 5 }, onGetAjaxs ); function onGetAjax(data) { // Получение данных, отправленных сервером alert(data); } load(url); $('div#mydiv').load('test.php'); { "firstName": "Иван", "lastName": "Иванов", "address": "streetAddress": "Московское ш., 101, кв.101", "phoneNumbers": "812 123-1234" } getJSON(url, params, callback) $(document).ready(function(){ $.getJSON('test.php', {param: 10}, onGetAjax); function onGetAjax(data) { alert(data.param + ' ' + data.response); } }); $('a').css('color', '#ff0000'); $.getScript('jstest.js'); ----------------------------------------------------------------------------------------------------------------- WinBinder PHP. Создаём GUI-интерфейс за 2 клика Александр Майоров bool wb_set_image (int wbobject, mixed source, int transparentcolor, int index, int param) // Main Window's processor function main_events_handler($Sender, $id) { switch($id) { case IDC_PUSHBUTTON1002: wb_message_box($Sender, "Hello world!", "My first test programm"); break; case IDCLOSE: wb_destroy_window($Sender); break; } } wb_set_handler($winmain, "main_events_handler"); "res:///RESOURCETYPE/RESOURCENAME" include "res:///PHP/DEBUG"; 'close' , IDC_PUSHBUTTON1004 => 'pushButton1' , IDC_PUSHBUTTON1005 => 'pushButton2' ); wb_set_handler($winmain, 'WBMain::callSignalHandler'); wb_main_loop(); } public static function ? callSignalHandler($Window, $signal) { if (isset(self::$signalsBind[$signal]) && is_callable($foo = 'WBMain::signal_' . self::$signalsBind[$signal])) call_user_func($foo, $Window); } public static function signal_pushButton1($Window) { wb_message_box($Window, __METHOD__, ''); } public static function signal_pushButton2($Window) { wb_message_box($Window, __METHOD__, ''); } public static function signal_close($Window) { wb_destroy_window($Window); } } WBMain::main(); ?> public static function signal_pushButton1($Window) { preg_match ( wb_get_text(self::$components[IDC_RTFEDITBOX1002]), wb_get_text(self::$components[IDC_RTFEDITBOX1001]), $arrayResults ); self::setResult($arrayResults); } public static function signal_pushButton2($Window) { preg_match_all ( wb_get_text(self::$components[IDC_RTFEDITBOX1002]), wb_get_text(self::$components[IDC_RTFEDITBOX1001]), $arrayResults ); self::setResult($arrayResults); } public static function setResult(array $arrayResults) { $result = 'PCRETester' . highlight_string ( "' ; static $file; if (!$file) $file = getcwd() . '/render.tmp'; $fp = fopen($file,'w+'); fwrite($fp, $result); fclose($fp); wb_set_location(self::$components[IDC_HTMLCONTROL1003], $file); } Connect(); $data_array = $Com->GetFriendList(); ?> ----------------------------------------------------------------------------------------------------------------- Доступ к данным на основе хранимых процедур в веб-приложениях Антон Гришан /* Выбрать все города в стране с заданным кодом, динамическая генерация запроса */ $countryCode = 'RU'; $result = mysqli_query ($db, "SELECT Cities.name FROM Countries, Cities WHERE Cities.countryId = Countries.id AND Countries.code = '".mysqli_real_escape_string($db, $countryCode)."'"); DELIMITER $$ CREATE PROCEDURE `getCities`(countryCode char(2)) BEGIN SELECT Cities.name FROM Countries, Cities WHERE Cities.countryId = Countries.id AND Countries.code = countryCode; END$$ DELIMITER ; CALL `getCities`('RU'); /* Выбрать все города в стране с заданным кодом, вызов хранимой процедуры */ $countryCode = 'RU'; mysqli_multi_query($db, "CALL getCities('".mysqli_real_escape_string($db, $countryCode)."');"); getCities('RU'); // Обрабатываем полученный результат (массив данных) var_dump($result); ?> db = new mysqli($host, $login, $password, $dbName, $port); $this->db->set_charset($charset); } public function __call($storeProcedureName, $params) { $quotedParams = array(); foreach($params as $param) { array_push($quotedParams, $param === null ? 'NULL' : '\''.$this->db->escape_string($param).'\''); } $sql = 'CALL `'.$storeProcedureName.'`('.implode(',', $quotedParams).');'; $this->db->multi_query($sql); $results = array(); do { if ($result = $this->db->store_result()) { $rows = array(); while ($row = $result->fetch_assoc()) { array_push($rows, $row); } $result->close(); array_push($results, $rows); } } while ($this->db->more_results() && $this->db->next_result()); return($results); } } ?> -----------------------------------------------------------------------------------------------------------------