Есть ли жизнь на... «Альфе»? Антон Борисов Листинг 1. Запись в AlphaBIOS с параметрами для запуска NT 4.0 SYSTEMPARTITION scsi(0)disk(0)rdisk(0)partition(1) OSLOADER scsi(0)disk(0)rdisk(0)partition(1)\os\winnt40\osloader.exe OSLOADPARTITION scsi(0)disk(0)rdisk(0)partition(1) OSLOADFILENAME \WINNT40 ----------------------------------------------------------------------------------------------------------------- FreePinger. Простой сетевой монитор Юрий Винник Proc := TProcess.Create(nil); Proc.Options := [poUsePipes, poNoConsole]; Proc.ShowWindow := swoNone; Proc.CommandLine := 'ping -c '+Addr; Proc.Execute; Alias /freepinger /usr/share/freepinger #Прописываем псевдоним freepinger таким образом, чтобы он #ссылался на каталог, в котором содержатся файлы #интерфейса (index.cgi, add_edit и т.д.). #Теперь при вводе в адресной строке браузера адреса #http://адрес_вашего_сервера/freepinger/ будет осуществлен #автоматический переход к каталогу /usr/share/freepinger . #Описываем директивы Apache для этого каталога Options +ExecCGI #Разрешаем выполнять в каталоге CGI- скрипты AddHandler cgi-script .bin #Указание серверу ассоциировать файлы с расширением #bin, как CGI-скрипты DirectoryIndex index.bin #Переопределяем файл, открываемый по умолчанию #с index.html на index.bin Order allow,deny Allow from all #Разрешаем доступ к интерфейсу со всех хостов #Если мы хотим разрешить доступ с избранных адресов #сети, то нужно перечислить их через запятую #в директиве Allow from AuthUserFile /usr/share/freepinger /.htpasswd #Файл с паролями для пользователей, которым разрешен #доступ AuthType basic #Тип аутентификации AuthName "FreePinger access" Require valid-user #Разрешаем доступ всем пользователям, перечисленным #в .htpasswd htpasswd -cb /путь_к_каталогу_freepinger/.htpasswd имя_пользователя пароль ----------------------------------------------------------------------------------------------------------------- Использование SNMP для резервирования активного оборудования Владимир Нефёдов C-3825-B #configure terminal C-3825-B)#ip access-list standard al-snmp-rw C-3825-B (config-std-nacl)#permit 10.50.2.5 C-3825-B (config-std-nacl)#exit C-3825-B (config)#snmp-server community snmp_rw RW al-snmp-rw C:\>snmpwalk -c ren_ro 10.255.1.247 .1.3.6.1.2.1.2.2.1.2 Set oExec = WshShell.Exec("snmpset -c snmp_rw " & sWks & " .1.3.6.1.2.1.2.2.1.7.2 NTEGER " & iInt) SCHTASKS /Create /RU nefedov /RP nef03141 /SC MINUTE /MO 300 /TN snmp-job /ED 31/12/2020 /TR "c:\vbs.nef\snmp-interface.vbs 10.255.1.252 10.255.1.252" Листинг 1. Скрипт для управления интерфейсами SNMP 'ON ERROR RESUME NEXT Call Main Sub Main() ' ON ERROR RESUME NEXT bArg = GetArguments(sIPmain, sIPbkp) if wksPing(sIPmain) Then if GetSnmp(sIPbkp) = "DOWN" Then WScript.Quit(0) End If sSetSnmp = SetSnmp(sIPbkp, 2) else if GetSnmp(sIPbkp) = "UP" Then WScript.Quit(0) End If sSetSnmp = SetSnmp(sIPbkp, 1) End If WScript.Quit(0) End Sub ‘Получает информацию о состоянии устройства Function wksPing(sWks) Dim WshShell, oExec Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("ping -n 3 -w 2000 " & sWks) StrPingStdout = LCase(oExec.StdOut.ReadAll) If Instr(StrPingstdout, "ttl=") Then wksPing = TRUE else wksPing = FALSE WScript.Echo("The device is inaccessible") End If End Function ‘Получает аргументы Private Function GetArguments(sIPm, sIPb) If Wscript.Arguments.Count > 1 Then sIPm = Wscript.arguments.Item(0) sIPb = Wscript.arguments.Item(1) else WScript.Echo("Set to correct IP_ADDRESS (EXAMPLE snmp-interface.vbs IP_ADDRESS-main IP_ADDRESS-bkp)") WScript.Quit(1) End If GetArguments = TRUE End Function ‘Управляет состоянием интерфейса Function SetSnmp(sWks, iInt) Dim WshShell, oExec Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("snmpset -c snmp_rw " & sWks & " .1.3.6.1.2.1.2.2.1.7.2 INTEGER " & iInt) strSnmpStdout = LCase(oExec.StdOut.ReadAll) Wscript.Echo strSnmpStdout If Instr(strSnmpStdout, "integer: down") Then WScript.Echo(sWks & " Set Interface DOWN") SetSnmp = "DOWN" else WScript.Echo(sWks & " Set Interface UP") SetSnmp = "UP" End If End Function ‘Получает информацию о состояние интерфейса Function GetSnmp(sWks) Dim WshShell, oExec Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("snmpget -c snmp_rw " & sWks & " .1.3.6.1.2.1.2.2.1.7.2") strSnmpStdout = LCase(oExec.StdOut.ReadAll) Wscript.Echo strSnmpStdout If Instr(strSnmpStdout, "integer: down") Then WScript.Echo(sWks & " Interface ststus DOWN") GetSnmp = "DOWN" else WScript.Echo(sWks & " Interface ststus UP") GetSnmp = "UP" End If End Function Листинг 2. Для резервного маршрутизатора (C-3845-B) service timestamps debug datetime msec service timestamps log datetime localtime service password-encryption ! hostname C-3825-B ! boot-start-marker boot-end-marker ! logging buffered 4096 debugging ! aaa new-model ! aaa authentication login default local aaa authorization exec default local ! aaa session-id common ! clock timezone MSK 3 clock summer-time MSK recurring last Sun Mar 2:00 last Sun Oct 3:00 ip subnet-zero ! ip cef ! no ip domain lookup ! ! interface GigabitEthernet0/0 description Connection Office ip address 10.255.1.252 255.255.0.0 no ip redirects ip route-cache flow vrrp 2 ip 10.255.1.254 vrrp 2 timers advertise 3 vrrp 2 timers learn vrrp 2 priority 90 vrrp 2 authentication v-gi0/0 no ip redirects ip route-cache flow shutdown ! interface GigabitEthernet0/1 description Connection to IP VPN ip address 172.17.0.1 255.255.255.252 no ip redirects ip route-cache flow ! router bgp 65444 no synchronization bgp log-neighbor-changes redistribute connected neighbor 172.17.0.2 remote-as 65555 neighbor 172.17.0.2 default-originate no auto-summary ! ip classless ip route 0.0.0.0 0.0.0.0 Null 254 ! control-plane ! snmp-server community snmp_rw RW al-snmp-rw ! ip access-list standard al-snmp-rw permit 10.255.1.5 ! line con 0 exec-timeout 3 0 transport output all stopbits 1 line aux 0 transport output all stopbits 1 line vty 0 4 exec-timeout 5 0 transport input all transport output all ! scheduler allocate 20000 1000 ! End ----------------------------------------------------------------------------------------------------------------- На языке PowerShell. Сценарий регистрации пользователей в сети. Часть 1 Иван Коробко Листинг 1. Шаблон XML-файла для модуля сценария Листинг 2. Шаблон XML-файла для модуля сценария # Определение имени конфигурационного XML-файла $fileName = "disk.xml" # Получение доступа к XML-файлу [xml]$obj = Get-Content .\$fielname # if ([int32]$obj.Root.Part.Enable -eq 1 ) {….} ----------------------------------------------------------------------------------------------------------------- Используем SSL для защиты корпоративной почты Рашид Ачилов # openssl req -new -sha1 -newkey rsa:1024 -nodes -keyout mailsrv.key -out mailsrv.pem # openssl ca -policy policy_anything -out ssl.crt/mailsrv.pem -infiles ssl.csr/mailsrv.pem # openssl x509 -in ssl.crt/mailsrv.pem -out ssl.crt/mailsrv.crt # Разрешить пароли в текстовом виде во время SSL-сессии set clear-text-password = ssl # Включить поддержку POP3S на альтернативном порту (995). # Для того чтобы принимать соединения на порту 110, задайте stls set tls-support = alternate-port # Задать используемые версии протокола SSLv2, SSLv3, TLSv1 set tls-version = default # Задать расположение и имя файла сертификата ключа set tls-server-cert-file = /etc/ssl/mailsrv.crt # Задать расположение и имя файла ключа set tls-private-key-file = /etc/ssl/mailsrv.key # Порты, на которых будем принимать соединения protocols = pop3s # Запретить пароли в открытом виде до установления SSL-сессии disable_plaintext_auth = yes # Включить поддержку SSL. Значение yes позволит работать без SSL, # если не plaintext-авторизация, значение required требует SSL всегда ssl = required # Задать расположение сертификата и ключа сертификата ssl_cert_file = /etc/ssl/mailsrv.crt ssl_key_file = /etc/ssl/mailsrv.key # verbose_ssl = yes # Файл контрольного сертификата ssl_ca_file = /etc/ssl/cafile.pem # Проверять сертификат клиента ssl_verify_client_cert = yes # Требовать от клиента предъявления сертификата auth default { ... ssl_require_client_cert = yes ... } # openssl ca -gencrl -out cacrl.pem # cd /etc/ssl && cat caserv.pem cacrl.pem > cafile.pem # openssl req -new -newkey rsa:1024 -nodes -keyout client1.key -out client1.csr # openssl ca -policy policy_anything -out client1.crt -infiles client1.csr # openssl pkcs12 -export -in client1.crt -inkey client1.key -certfile caserv.crt -out client1.p12 -passout pass:123456 ----------------------------------------------------------------------------------------------------------------- Разворачиваем PKI на Windows Server 2008. Доверительные отношения. Часть 3 Андрей Бирюков certutil /? ----------------------------------------------------------------------------------------------------------------- Бюджетная видеоконференция c HD-качеством на OpenMCU Николай Емашев filemembers.cxx void ConferenceFileMemb er::WriteThreadV(PThread &, INT) { PString cstr = "video." + conference->GetNumber(); const char *cname = cstr; cout << "cname= " << cname << "\n"; mkfifo(cname,S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR); int SV=open(cname,O_WRONLY); int amount = CIF_WIDTH*CIF_HEIGHT*3/2; PBYTEArray videoData(amount); PAdaptiveDelay videoDelay; int success=0; while (running) { // read a block of data conference->ReadMemberVideo(this,videoData.GetPointer(),CIF_WIDTH,CIF_HEIGHT,amount); // write to the file if (write(SV,(const void *)videoData.GetPoint er(),amount)<0) { close(SV); SV=open(cname,O_WRONLY); success=0; videoDelay.Restart();} else if(success==0) { success++; videoDelay.Restart(); } // and delay videoDelay.Delay(100); } close(SV); } # cd /usr/ports/devel/binutils # make install clean # cd /usr/ports/devel/git # make install clean # cd /usr/ports/devel/yasm # make install clean # cd /usr/ports/shells/bash # make install clean # chmod 755 * # ./configure --enable-shared --disable-asm #cp /usr/bin/as /usr/bin/as.old # cd /usr/src/x264 # ./configure --enable-shared # gmake # gmake install # cp /usr/bin/as.old /usr/bin/as # cd /usr/ports/multimedia/ffmpeg-devel # make install clean # cd /usr/src/ptlib # ./configure --enable-shared # gmake opt # gmake install # cd /usr/src/h323plus # ./configure --enable-shared # gmake opt # gmake install # export PTLIBDIR=/usr/src/ptlib # gmake # cd /usr/src/H.264_88/ # gmake # cd /usr/src/H.263-1998 # gmake # cd /usr/src/openmcu # gmake opt ./openmcu -d -i /usr/local/etc/openmcu.ini # /usr/local/openmcu/start.sh #./openmcu -cx ----------------------------------------------------------------------------------------------------------------- Как вырастить дерево. Общие принципы построения систем проектирования Александр Ямпольский public struct ObjectN // объект (узел дерева) { public string J_NAME; // имя объекта // тип объекта (ссылка на абстрактный объект, см. далее) public long J_TYPE; public long IDF, // указатель на «отца» IDB, // указатель на «брата» ID1C; // указатель на «первого потомка» объекта } public ObjectN[] obj = new ObjectN[]; FreeCell = getfreecell(); obj[FreeCell].IDF = ParentIdentifier; obj[FreeCell].IDB = obj[ParentIdentifier].ID1C; obj[ParentIdentifier].ID1C=FreeCell; while (ObjPnt != RootIdentifier) { ObjPnt=obj[ObjPnt].IDF; // if (требуемая информация получена) break; } / Этот тест демонстрирует обход (поиск) с использованием // списка промежуточных пунктов: namespace test1 { public struct ObjectN // Объект (узел дерева) { public string J_NAME; // Имя объекта public long IDF, // Указатель на «отца» IDB, // Указатель на «брата» ID1C; // Указатель на «первого потомка» // объекта } // Обход ветви public class Branch { private DataBase db; // Присоединение базы данных public long sourceobj; // Исходный узел ветви public int travdepth; // Предельная глубина обхода public string waypnts; // Список промежуточных пунктов // . . . } // class Branch // Итератор для обхода ветви public class BranchIter : IEnumerator { private ObjectN[] obj; // Пространство дерева private Branch branch; private object currentObj=(long)0; private long[] Router; private int Lev, // Счетчик уровней дерева Curs; // Вспомогательный указатель уровня private bool EOTree; // Флаг «конец дерева» private long ObjPnt, // Вспомогательный указатель // на объект (узел) FirstCh; // Указатель на «первого потомка» // исходного объекта (узла) // Переход к следующему объекту согласно BF-схеме // (модифицированная процедура descent) public bool MoveNext() { if (FirstCh<1) {currentObj=(long)0; return(false);} while (ObjPnt<1) { // Подняться по цепочке Router до первого // ненулевого указателя на объект Curs=Curs-1; while (Curs>0) { ObjPnt=obj[Router[Curs]].IDB; if (ObjPnt>0) break; Curs=Curs-1; } if (Curs == 0) // «Конец уровня» { if (EOTree || Lev==branch.travdepth) {currentObj=(long)0; return(false);} EOTree=true; ObjPnt=FirstCh; Lev=Lev+1; Curs=1; } // Спуск на уровень Lev по краю ветви while (Curs < Lev) { Router[Curs]=ObjPnt; Curs=Curs+1; // Блок отсечения // if (имени объекта нет в списке промежуточных пунктов) // { // Console.WriteLine // ("-pruning of object: {0}({1})",obj[ObjPnt].J_NAME,ObjPnt); // ObjPnt=(long)0; // break; // Как будто узел не имеет потомков // } ObjPnt=obj[ObjPnt].ID1C; if (ObjPnt<1) break; // Узел не имеет потомков } } // while (ObjPnt<1) // Выпуск очередного узла EOTree=EOTree && (obj[ObjPnt].ID1C<1); currentObj=ObjPnt; ObjPnt=obj[ObjPnt].IDB; return(true); } // MoveNext() } // class BranchIter public class Program { public static string InpStr; // Входная строка static void Main(string[] args) { DataBase DB = new DataBase(100); while (true) { Console.WriteLine("\nInput the waypoints,for example: block.3;cage"); InpStr=Console.ReadLine(); // if (...) break; // quit Console.WriteLine("\nwaypoint_list: {0}",InpStr); // Branch branch = new Branch(...); // BranchIter branchit = (BranchIter)branch.GetEnumerator(); foreach (long objid in branch) { Console.WriteLine("met object:{0}({1})",DB.obj[objid].J_NAME,objid); //if (String.Compare(target_object_name,met_object_name) ... } } // while (true) return; } // Main } // class Program // Имитация Базы данных public class DataBase { public ObjectN[] obj; // Пространство дерева // ... } // class DataBase } // namespace test1 block.3;cage // Этот тест демонстрирует обход с «погружениями»: using System; using System.Collections; namespace test2 { public struct ObjectN // Объект (узел дерева) { public string J_NAME; // Имя объекта public long IDF, // Указатель на «отца» IDB, // Указатель на «брата» ID1C; // Указатель на «первого потомка» // объекта } // Обход ветви public class Branch { private DataBase db; // Присоединение базы данных public long sourceobj; // Исходный узел ветви public int travdepth; // Предельная глубина обхода public string targmsk; // Маска имен целевых объектов private int TargRank=0; // Ранг целевых объектов // . . . } // class Branch // Итератор для обхода ветви public class BranchIter : IEnumerator { private ObjectN[] obj; // Пространство дерева private Branch branch; private object currentObj=(long)0; private long[] Router; private int Lev, // Счетчик уровней дерева Curs; // Вспомогательный указатель уровня private bool EOTree; // Флаг «конец дерева» private long ObjPnt, // Вспомогательный указатель // на объект (узел) FirstCh; // Указатель на «первого потомка» // исходного объекта (узла) // Переход к следующему объекту согласно BF-схеме public bool MoveNext() { if (FirstCh<1) {currentObj=(long)0; return(false);} while (ObjPnt<1) { // Подняться по цепочке Router до первого // ненулевого указателя на объект Curs=Curs-1; while (Curs>0) { ObjPnt=obj[Router[Curs]].IDB; if (ObjPnt>0) break; Curs=Curs-1; } if (Curs == 0) // «Конец уровня» { if (EOTree || Lev==branch.travdepth) {currentObj=(long)0; return(false);} EOTree=true; ObjPnt=FirstCh; Lev=Lev+1; Curs=1; } // Спуск на уровень Lev по краю ветви while (Curs < Lev) { Router[Curs]=ObjPnt; Curs=Curs+1; // Блок отсечений // if (Объект уже был обработан) // { // Console.WriteLine("-pruning of already elaborated object: {0}({1})", // obj[ObjPnt].J_NAME,ObjPnt); // ObjPnt=(long)0; // break; // as if node has no children // } // if (Объект имеет низкий ранг) // { // Console.WriteLine("-pruning of unpromising object: {0}({1})", // obj[ObjPnt].J_NAME,ObjPnt); // ObjPnt=(long)0; // break; // as if node has no children // } ObjPnt=obj[ObjPnt].ID1C; if (ObjPnt<1) break; // node has no children } } // while (ObjPnt<1) // issue the next node EOTree=EOTree && (obj[ObjPnt].ID1C<1); currentObj=ObjPnt; ObjPnt=obj[ObjPnt].IDB; return(true); } // MoveNext() } // class BranchIter public class Program { public static string InpStr; // input string static void Main(string[] args) { DataBase DB = new DataBase(100); while (true) { Console.WriteLine("\nInput the mask of target object names, for example: stor*"); InpStr=Console.ReadLine(); // if (...) break; // quit Console.WriteLine("\ntarget object mask: {0}",InpStr); // Branch branch = new Branch(DB,...); // BranchIter branchit = (BranchIter)branch.GetEnumerator(); foreach (long objid in branch) { Console.WriteLine("met object: ? {0}({1})",DB.obj[objid].J_NAME,objid); if (BranchIter.FilterOK(InpStr,DB.obj[objid].J_NAME)) // Если целевой объект { // Обработка целевого объекта Console.WriteLine("target object: {0}({1})",DB.obj[objid].J_NAME,objid); // Установить ранг целевых объектов равным // рангу первого встреченного целевого объекта // if (первый) (...) // Branch br = new Branch(DB,objid,...); // BranchIter brit = ? (BranchIter)br.GetEnumerator(); foreach (long objid1 in br) { Console.WriteLine("met object: {0}({1})",DB.obj[objid1].J_NAME,objid1); } // foreach (objid1) } // if (FilterOK) } // foreach (objid) } // while (true) return; } // Main } // Program // Имитация базы знаний public class KnowBase { // Имитация ранжирования: blocks-50; stories-40; // slabs,columns,beams-30 public static string[] Ranks= {"bloc*","50","stor*","40","slab*","30","col*","30","beam*","30"}; } // KnowBase // Имитация базы данных // public class DataBase // { // . . . // } // class DataBase } // namespace test2 stor* ----------------------------------------------------------------------------------------------------------------- Umit – фронтенд для Nmap. Работаем в локальной сети и через PPPoE-соединение Игорь Штомпель # Сетевая карта (физически первая) auto eth0 # Указываем, что для интерфейса eth0 используется статический IP-адрес iface eth0 inet static # Прописываем IP-адрес, маску и шлюз address 192.168.7.57 netmask 255.255.248.0 gateway 192.168.0.1 $ sudo ifdown eth0 $ sudo ifup eth0 $ ifconfig $ ifconfig eth0 $ sudo dpkg -i pppoeconf_1.19ubuntu1_all.deb $ sudo pppoeconf $ cat /etc/resolv.conf $ ifconfig $ sudo apt-get install umit $ umit $ sudo umit nmap -sS -T Normal -O nmap -PE -sS -T Normal -O nmap -sS -sO nmap -T Aggressive -v -n nmap -v -n -----------------------------------------------------------------------------------------------------------------