Есть ли жизнь на... «Альфе»?
Антон Борисов
Листинг 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
-----------------------------------------------------------------------------------------------------------------