Как эффективно провести инвентаризацию установленного софта
Андрей Бирюков
Листинг 1. Подключение сетевого диска
On Error Resume Next
Set objNetwork = CreateObject("WScript.Network")
Set CheckDrive = objNetwork.EnumNetworkDrives()
objNetwork.MapNetworkDrive "X:", "\\10.0.1.5\share"
Листинг 2. Отключение сетевого диска
WScript.Sleep 3000
objNetwork.RemoveNetworkDrive CheckDrive.Item(0), true
Листинг 3. Обходим ветку реестра и сохраняем данные в файл
unKeyPath = "Software\Microsoft\Windows\CurrentVersion\Uninstall"
unValueName = ("DisplayName")
objReg.EnumKey HKLM, unKeyPath, arrSubKeys
i=0
For Each Subkey in arrSubKeys
objDictionary2.Add i, unKeyPath & "\"& subkey & (Enter)
i=i+1
Next
………………………
For Each objItem in objDictionary2
strKeyPath = objDictionary2.Item(objItem)
objReg.GetStringValue HKLM ,strKeyPath, unValueName, strValue
'сохраняем нужное значение в файл
objTextFile2.WriteLine (strValue)
If Err Then
objDictionary2.Remove(objItem)
End If
Next
Листинг 4. Ветки, содержащие информацию об имени пользователя и имени компьютера
pcName = "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\"
pcNameValueName = "ComputerName"
userPath = "Software\Microsoft\Windows NT\CurrentVersion\Winlogon\"
userValueName = "DefaultUserName"
Листинг 5. Полный текст сценария
' Объявляем константу HKEY_LOCAL_MACHINE
Const HKLM = &H80000002
Const REG_SZ = 1 '
Const ForReading = 1
Const ForWriting = 2
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDictionary2 = CreateObject("Scripting.Dictionary")
Dim objNetwork, objShell, CheckDrive
Dim strDriveLetter, strRemotePath, intDrive, bforce
' Данные для сетевого диска
strDriveLetter = UCase("x:" ) ' Имя диска
strRemotePath = "\\10.0.1.5\tmp" ' Сетевой путь
bforce = true
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
Set CheckDrive = objNetwork.EnumNetworkDrives()
' А это уже путь, где будет создан файл с информацией о приложениях
strPath = "x:\"
strComputer = "localhost" ' Проверяем локальный компьютер
' Подключаем сетевой диск
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath
' Запускаем процедуру сбора информации
GetInstalledSoftware()
' Отключаем сетевой диск
If CheckDrive.Item(intDrive) <> strDriveLetter Then objNetwork.RemoveNetworkDrive CheckDrive.Item(0), bforce
Sub GetInstalledSoftware()
On Error Resume next
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
If Err <> "0" Then
Exit Sub
End If
' Путь к разделу реестра Uninstall, содержащему информацию об установленных компонентах
unKeyPath = "Software\Microsoft\Windows\CurrentVersion\Uninstall"
unValueName = ("DisplayName")
objReg.EnumKey HKLM, unKeyPath, arrSubKeys
i=0
For Each Subkey in arrSubKeys
objDictionary2.Add i, unKeyPath & "\"& subkey & (Enter)
i=i+1
Next
pcName = "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\"
pcNameValueName = "ComputerName"
userPath = "Software\Microsoft\Windows NT\CurrentVersion\Winlogon\"
userValueName = "DefaultUserName"
objReg.GetStringValue HKLM,pcName,pcNameValueName,pcValue
objReg.GetStringValue HKLM,userPath,userValueName,userValue
strFileName = UserValue & "_" & "On" & "_" & PCValue & "_"& "Software" _
& year(date()) & right("0" & month(date()),2) _
& right("0" & day(date()),2) & ".txt"
Set objTextFile2 = objFSO.OpenTextFile(strPath & strFileName, ForWriting, True)
objTextFile2.WriteLine(vbCRLF & _
"Current Installed Software " & vbCRLF & Time & vbCRLF & Date _
& vbCRLF & "Software For:" & "" & userValue & vbCRLF & "On System:" _
& "" & pcValue & vbCRLF)
For Each objItem in objDictionary2
strKeyPath = objDictionary2.Item(objItem)
objReg.GetStringValue HKLM ,strKeyPath, unValueName, strValue
objTextFile2.WriteLine (strValue)
If Err Then
objDictionary2.Remove(objItem)
End If
Next
End Sub
wscript.Quit
Листинг 6. Запуск сценария на удаленных машинах домена
Set objPCTXTFile = objFSO.OpenTextFile("c:\test.txt", ForWriting, True)
' Получаем информацию о домене
Set objDomain = GetObject("WinNT://" & strDomain)
' Интересует объект компьютеры
objDomain.Filter = Array("Computer")
For Each pcObject In objDomain
objPCTXTFile.WriteLine pcObject.Name
Next
objPCTXTFile.close
' Читаем компьютеры из созданного файла
Set readPCFile = objFSO.OpenTextFile(strPath & strPCsFile, ForReading)
i = 0
Do Until readPCFile.AtEndOfStream
strNextLine = readPCFile.Readline
objDictionary.Add i, strNextLine
i = i + 1
Loop
readPCFile.Close
' Запускаем процедуру сбора информации на каждом компьютере
For each DomainPC in objDictionary
strComputer = objDictionary.Item(DomainPC)
GetInstalledSoftware()
Next
Листинг 7. Создание документа Excel c результатами
…………….
Set s = oE.Sheets(1) ' Лист 1
s.Name = "Список"
Set s1 = oE.Sheets(2) ' Лист 2
s1.Name = "Сумма"
s.Rows(1).RowHeight = 2 * s.StandardHeight
s.Cells(1,1) = "Список установленных приложений"
s.Cells(2,1) = "Имя компьютера"
s.Cells(2,2) = "Приложения"
s.Columns("A:B").Columns.AutoFit
With s.Range("A1:B1")
.MergeCells = True
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.Font.Size=14
End With
s1.Rows(1).RowHeight = 2 * s1.StandardHeight
s1.Cells(1,1) = "Количество установленных приложений"
s1.Cells(2,1) = "Приложение"
s1.Cells(2,2) = "Всего установок"
s1.Columns("A:B").Columns.AutoFit
With s1.Range("A1:B1")
.MergeCells = True
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.Font.Size=14
End With
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set fso = CreateObject("Scripting.FileSystemObject")
' Получаем сведения о файлах, находящихся в данной папке
Set fld = fso.GetFolder(".")
Set objTextFile2 = objFSO.OpenTextFile("c:\temp\tmp", ForWriting, True)
For Each fi In fld.Files
If fi.name<>"excel.vbs" AND fi.name<>"result.xls" Then
' Файл сценария и файл отчета не открывать
Set readPCFile = objFSO.OpenTextFile(fi, ForReading)
i = 0
s.Cells(n, 1) = fi.name ' Имя файла – это имя компьютера
Do Until readPCFile.AtEndOfStream
strNextLine = readPCFile.Readline
i = i + 1
' Первые 6 строк в файлах отчетах – это шапка,
' экспортировать не нужно
If i>6 Then
s.Cells(n, 2) = strNextLine
objTextFile2.WriteLine (strNextLine)
n = n + 1
End If
Loop
readPCFile.Close
End If
Next
objTextFile2.close
f=3
Set objTextFile2 = objFSO.OpenTextFile("c:\temp\tmp", ForReading)
Do Until ObjTextFile2.AtEndOfStream
strNextLine = objTextFile2.Readline
' ищем вхождения имени приложения
Set fc = s1.Columns("A").Find(strNextLine)
If fc Is Nothing Then ' не нашли, тогда добавляем
s1.Cells(f,1)=strNextLine
Set fc = s.Columns("B").Find(strNextLine)
If Not fc Is Nothing Then
count=0
With s.Columns("B")
Set c = .Find(strNextLine)
If Not c Is Nothing Then
firstAddress = c.Address
Do
' считаем количество установок
count=count+1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
s1.Cells(f,2)=Count ' сохраняем количество установок
End If
f=f+1
End If
Loop
-----------------------------------------------------------------------------------------------------------------
Мультизагрузка: стелим соломку
Сергей Супрунов
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows 2000Pro" /fastdetect
C:\="Windows 98SE"
# lilo -u
other = /dev/hda1 # Указываем загрузочный раздел Windows
table = /dev/hda # Таблицу разделов следует искать в MBR
label = windows # Наименование загружаемой системы
title FreeBSD # Указываем имя ОС
root (hd0,2,a) # Выбираем корневой раздел для загрузки
kernel /boot/loader # Указываем файл для передачи управления
title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1
# dd if=/dev/fd0 of=floppy.bs bs=512 count=1
title FreeBSD
chainloader (hd0,2)+1
title Windows 98
chainloader (hd0,0)/bootsect.dos
# dd if=/dev/hda2 of=bootsect.lnx
# mount /dev/hda1 /mnt
# cp bootsect.lnx /mnt
# umount /mnt
C:\bootsect.lnx="SUSE Linux 10.0"
# dd if=/dev/hdb of=bootsect.hdb bs=512 count=1
-----------------------------------------------------------------------------------------------------------------
Круговорот почты в сети, или Архитектура современных почтовых систем
Евгений Прокопьев
# telnet localhost 25
#!/bin/sh
/usr/sbin/sendmail -t << EOF
From: user1@domain1.com
To: user2@domain2.com
Subject: Test Message
Hello!
EOF
# telnet localhost 110
# telnet localhost 143
-----------------------------------------------------------------------------------------------------------------
IСQ: разрешить нельзя запретить
Павел Закляков
# cat libpcap.tar.Z|tar -xvz -C /progi
# cd /progi/libpcap-0.4
# ./configure
# make
# make install
# cat файл_архива_модуля.tar.gz|tar -xvz -C /progi
# cd /progi/директория_модуля
# perl Makefile.PL
# make
# make test
# make install
# ./aimSniff.pl
# ./aimSniff.pl
# ./aimSniff.Cyr.pl -nodb
# tcpdump -s 10000 -i eth0 src or dst port 5190 -w /path/traffic_dump.bin
# ./aimSniff.Cyr.pl --nodb -r=traffic_dump.bin
# ./aimSniff.Cyr.pl --nodb>>/var/www/html/icq_messages_log.txt
# mysqladmin create aimsniff
# mysql aimsniff < table.struct
# mysql -D aimsniff -u root -p [пароль_root_в_СУБД_MySQL]< table.struct
# mysql -D aimsniff -u root -p
mysql> describe имя_таблицы;
mysql> GRANT ALL ON aimsniff.* TO aimsniff@hotsname IDENTIFIED BY 'пароль_к_БД_aimsniff';
mysql> FLUSH PRIVILEGES;
# dos2unix -n aimsniff.config aimsniff.conf
# /usr/local/bin/aimSniff.Cyr.pl -C=/путь/конфигурационный_файл.conf
# cp /progi/aimsniff-0.9d/rc.aimsniff /etc/rc.d/init.d/aimsniff
# chmod +x /etc/rc.d/init.d/aimsniff
/usr/local/bin/aimSniff.Cyr.pl -C=/usr/local/etc/aimsniff.conf
# /etc/rc.d/init.d/aimsniff start
# service aimsniff start
# ln -s ../init.d/aimsniff /etc/rc.d/rc3.d/S89aimsniff
# ln -s ../init.d/aimsniff /etc/rc.d/rc0.d/K10aimsniff
# ln -s ../init.d/aimsniff /etc/rc.d/rc6.d/K10aimsniff
ICQ message database
";
echo "
id
timestamp
local IP
from UID
to UIN
direction
message
»;
while($row=mysql_fetch_array($result))
{
if ($color) { echo "
"; $color=0; }
else { echo "
»; $color=1; }
echo "
".$row[0]."
";
echo "
".$row[1]."
";
echo "
".$row[2]."
";
echo "
".$row[3]."
";
echo "
".$row[4]."
";
if ($row[5]=="00040007") { echo "
<--
"; }
elseif ($row[5]=="00040006") { echo "
-->
"; }
else { echo "
".$row[5]."
"; }
echo "
".$row[6]."
";
echo "
";
}
echo "";
?>
CREATE TABLE 'localusers' (
'ip' VARCHAR(20) NOT NULL ,
'name' VARCHAR(30) NOT NULL ,
'phone' VARCHAR(10) NOT NULL ,
PRIMARY KEY ('ip')
);
CREATE TABLE 'nicnames' (
'icq' VARCHAR(255) NOT NULL ,
'nickname' VARCHAR(50) NOT NULL ,
PRIMARY KEY ('icq')
);
$request="SELECT logs.id,logs.ts,logs.ip,logs.fromHandle,
logs.handle,logs.direction,logs.message,
localusers.name
FROM logs LEFT JOIN localusers ON logs.ip=localusers.ip LIMIT 100";
echo "
".$row[6]."
";
if ($row[7]) { echo "
".$row[7]."
"; }
else { echo "
".$row[2]."
";
if ($row['name']) { echo "
".$row['name']."
"; }
else { echo "
".$row['ip']."
"; }
# chgrp apache .config.php
# chgrp g+w .config.php
# iptables -I INPUT -i $exterbal_interface -p tcp -d $perver_ip --dport 80 -j DROP
# iptables -I INPUT -i $exterbal_interface -p tcp -d $perver_ip --dport 443 -j DROP
Order deny,allow
Deny from all
Allow from 192.168.0.0/255.255.255.0
# htpasswd -c /путь/файл_с_учётными_записями user1
AuthType Basic
AuthName "Web AIM Shiff"
AuthUserFile /путь/файл_с_учётными_записями
Require user user1
AllowOverride None
# /etc/rc.d/init.d/httpd restart
-----------------------------------------------------------------------------------------------------------------
Защита электронной почты средствами MailScanner
Сергей Яремчук
www.bank.com
Направление: образец результат
Направление: образец and направление2: образец2 результат
To: bad.customer.com no
From: /^192\.168\.1[4567]\./ store forward user@domain.com
FromAndTo: *@*.domain.com yes
FromOrTo: default (или *@* т.е. любой) yes
# Main configuration file for the MailScanner E-Mail Virus Scanner
# Здесь указывается каталог, в котором содержатся все сообщения, на нужном языке. К сожалению, русского нет,
# этим придется заниматься самому
%report-dir% = /opt/MailScanner/etc/reports/en
# Ниже идут стандартные каталоги, в которых содержатся настройки и правила, если вы выбрали другой каталог,
# для запуска MailScanner все их необходимо переопределить
%etc-dir% = /opt/MailScanner/etc
# Здесь лежат правила
%rules-dir% = /opt/MailScanner/etc/rules
# Настройки Message Content Protection
%mcp-dir% = /opt/MailScanner/etc/mcp
# Название организации короткое, длинное (без пробелов) и веб-сайт
%org-name% = yoursite
%org-long-name% = Your Organisation Name Here
%web-site% = www.your-organisation.com
# System settings
# Количество одновременных процессов MailScanner. При мощном процессоре и большой нагрузке можно
# увеличить эту цифру. Один процесс занимает около 20 Мб
Max Children = 5
# По умолчанию MailScanner работает от имени пользователя и группы sendmail.
# В некоторых системах его нужно изменить
Run As User = postfix
Run As Group = postfix
# Время (в секундах), через которое будет производиться проверка папок на наличие новых сообщений
Queue Scan Interval = 6
# Папка, в которую будут помещаться входящие сообщения.
# Можно задать имя каталога – /var/spool/mqueue.in
# Шаблон – /var/spool/mqueue.in/*
# Имя файла, в котором описаны каталоги
# /opt/MailScanner/etc/mqueue.in.list.conf
Incoming Queue Dir = /var/spool/postfix/hold
# Каталог, куда будут складываться письма, прошедшие проверку (исходящий)
Outgoing Queue Dir = /var/spool/postfix/incoming
# Каталог, в котором почта перед проверкой будет распаковываться. При достаточном количестве ОЗУ можно
# использовать tmpfs или ramdisk
Incoming Work Dir = /var/spool/MailScanner/incoming
# Каталог для хранения зараженных сообщений (карантин)
Quarantine Dir = /var/spool/MailScanner/quarantine
# Местонахождение pid-файла
PID file = /opt/MailScanner/var/MailScanner.pid
# Во избежание утечки ресурсов MailScanner периодически перезапускается. Здесь указывается время в секундах
Restart Every = 14400
# Установка МТА – postfix, sendmail, exim или zmailer
MTA = postfix
# Ниже описываются местонахождение и параметры запуска второй копии MTA. Postfix и Qmail здесь не настраиваются (см.выше).
# Sendmail = /usr/lib/sendmail
# Sendmail2 используется для запуска Exim
# For Exim users: Sendmail2 = /usr/sbin/exim -C /etc/exim/exim_send.conf
# For sendmail users: Sendmail2 = /usr/lib/sendmail
# Sendmail2 = /usr/sbin/sendmail -C /etc/exim/exim_send.conf
# Sendmail2 = /usr/lib/sendmail
#
# Incoming Work Dir Settings
#
# Ниже указываются настройки для каталога входящих сообщений, в большинстве случаев трогать их не надо
# Здесь можно указать пользователя отличного от «Run As User» и «Run As Group».
# Эта опция может понадобиться при работе с некоторыми антивирусами
Incoming Work User =
Incoming Work Group =
# Права доступа к файлам, если не используется внешний антивирус, то ставим 0600, иначе заносим пользователя,
# от имени которого работает антивирус, в группу, в нашем случае postfix и ставим 0640.
# Хотя возможен вариант и с 0644
Incoming Work Permissions = 0640
#
# Quarantine and Archive Settings
#
# То же что и выше, только для файлов, которые попадут в карантин. Если захотите дать к ним доступ при помощи
# внешней программы, например, веб-интерфейс, то переопределяем их
Quarantine User =
Quarantine Group =
Quarantine Permissions = 0600
# Ниже идут параметры проверки входящих сообщений.
# Ограничения по размеру (в байтах) и количеству
Max Unscanned Bytes Per Scan = 100000000
Max Unsafe Bytes Per Scan = 50000000
Max Unscanned Messages Per Scan = 30
Max Unsafe Messages Per Scan = 30
# Количество сообщений в очереди, превышение этого числа приведет к переключению в «ускоренный» режим
# сканирования, когда сообщения проверяются не по дате, а в порядке поступления
Max Normal Queue Size = 800
# Опция ниже включает проверку на вирусы и спам для всех сообщений, установка в «no» приведет к тому, что почта
# проверяться не будет. Можно использовать файл с правилами, где указать, какие сообщения сканировать, а какие нет
# checked *at all*, and so any viruses or other problems
# will be ignored.
# Если используется файл правил
# /etc/MailScanner/rules/scan.messages.rules,
# то используем строку:
# Scan Messages = %rules-dir%/scan.messages.rules.
# Иначе включаем проверку для всей почты
Scan Messages = yes
# Максимально разрешенное количество вложений в одном письме. Некоторые почтовые системы сохраняют информацию
# при переписке в виде присоединения к письму, их распаковка занимает много времени
Maximum Attachments Per Message = 20
# Проверка TNEF (Microsoft’s Transport Neutral Encapsulaton Format) при помощи внешней программы.
# Некоторые антивирусы (Sophos, McAfee) самостоятельно проверяют такие вложения, в этом случае ставим «no».
Expand TNEF = yes
# Некоторые версии Microsoft Outlook генерируют неправильный TNEF, который используемый модуль проверить не может.
# Здесь можно запретить пропуск сообщений с таким присоединением. Как вариант можно использовать файл правил
Deliver Unparsable TNEF = no
# Команда запуска декодера TNEF, как вариант указывается ключевое слово «internal», подключающее Perl-модуль,
# выполняющий ту же работу. Можно использовать файл правил
#TNEF Expander = internal
TNEF Expander = /opt/MailScanner/bin/tnef --maxsize=100000000
# Максимальное время для работы с одним сообщением TNEF (в секундах)
TNEF Timeout = 120
# Месторасположение команды «file», позволяющей определить тип файла. Если не планируется проверка типа файлов,
# можно отключить
File Command = /usr/bin/file
File Timeout = 20
Unrar Command = /usr/bin/unrar
Unrar Timeout = 50
# Максимальный размер сообщений, включая заголовки.
# Установка в 0 снимает ограничения. Можно использовать файл правил и использовать возможность принудительного
# ограничения размера сообщения более тонко
Maximum Message Size = 0
# Максимальный размер в байтах для вложений. Установка в 0 запретит вложения, -1 снимает ограничения.
# Более тонко настройки можно указать в файле правил
Maximum Attachment Size = -1
# Минимальный размер вложений, опция бывает полезна при удалении очищенных антивирусом файлов, можно
# использовать файл правил
Minimum Attachment Size = -1
# Максимальная глубина распаковки архивов zip, для проверки имен и типов файлов
Maximum Archive Depth = 2
# Обнаружение архивов не только по имени, но и по содержимому, можно использовать файл правил
Find Archives By Content = yes
# Проверка писем на вирусы. Можно использовать файл правил.
Virus Scanning = yes
# Установка используемого вирусного сканера.
# В конфигурационном файле приведены примеры для всех поддерживаемых антивирусов. Можно добавить любой другой,
# для этого его необходимо описать в файле %etc-dir%/virus.scanners.conf, в который необходимо
# занести 3 позиции: имя сканера, сценарий для запуска и месторасположение (в некоторых системах путь придется
# подправить). Например, для СlamAV строка в этом файле выглядит так:
# clamav /opt/MailScanner/lib/clamav-wrapper /usr/local
# Установка в none отключает проверку.
# Если планируется использование сразу нескольких антивирусов, они перечисляются через пробел
# Virus Scanners = drweb kaspersky mcafee
#
Virus Scanners = clamav
Virus Scanner Timeout = 300
# Удаление вируса с зараженного файла, очищенное сообщение присоединяется как файл «VirusWarning.txt».
# Можно использовать файл правил.
Deliver Disinfected Files = yes
# Строка, которую ищет MailScanner на выходе антивируса.
# При обнаружении этих строк отправитель не предупреждается, вирус очищается, а дойдет ли письмо до получателя – зависит
# от «Still Deliver Silent Viruses».
# Для обозначения используются 5 ключевых слов:
# HTML-IFrame, HTML-Codebase, HTML-Script, HTML-Form и Zip-Password.
# Опция All-Viruses соответствует поиску всех вариантов.
# Можно использовать файл правил
Silent Viruses = All-Viruses
# Доставлять ли сообщение получателю после очистки?
# Можно использовать файл правил
Still Deliver Silent Viruses = no
# Опция противоположная предыдущей, при обнаружении указанных строк все участники получат предупреждения
Non-Forging Viruses = Joke/ OF97/ WM97/ W97M/ eicar
# Запрет отправки зашифрованных сообщений.
# Можно использовать файл правил
Block Encrypted Messages = no
# Запрет отправки незашифрованных сообщений.
# Можно использовать файл правил
Block Unencrypted Messages = no
# Разрешение использования зашифрованных архивов.
# Можно использовать файл правил
Allow Password-Protected Archives = no
#
# Options specific to ClamAV Anti-Virus
#
# В файле имеются предустановки для некоторых антивирусов.
# В большинстве случаев достаточно проверить все пути
Monitors for ClamAV Updates = /usr/local/share/clamav/*.cvd
ClamAVmodule Maximum Recursion Level = 5
ClamAVmodule Maximum Files = 1000
ClamAVmodule Maximum File Size = 10000000 # (10 Mб)
ClamAVmodule Maximum Compression Ratio = 250
# Далее указываются параметры работы MailScanner с потенциально опасным контентом. Практически везде можно
# использовать файл с правилами. Включение всех проверок
Dangerous Content Scanning = yes
# Работа с неполным вложением
Allow Partial Messages = no
# Разрешение сообщений, загружающих контент из Интернета. Запрещаем однозначно
Allow External Message Bodies = no
# Поиск подмены адресов
Find Phishing Fraud = yes
# Обычно в легальных письмах редко используется IP-адрес, фишеры же прибегают к этому способу для обмана. Запрещаем
Also Find Numeric Phishing = yes
# Вставка предупреждения о подмене
Highlight Phishing Fraud = yes
# Список сайтов, которые игнорируются при поиске фишеров
Phishing Safe Sites File = %etc-dir%/phishing.safe.sites.conf
# Разрешение соответствующих тегов в сообщении
# yes => Разрешает
# no => запрещает
# disarm => Разрешает, но нейтрализует тег
Allow IFrame Tags = disarm
Allow Form Tags = disarm
Allow Script Tags = disarm
Allow Object Codebase Tags = disarm
# То же для , но только два действия yes и disarm
Allow WebBugs = disarm
# Эта опция перекликается с «Allow ... Tags», т.е. при разрешении тега сообщение может быть преобразовано
# из HTML в текст
Convert HTML To Text = no
# Проверка вложений.
# Указываем файл с правилами, содержащий описание типов и имен файлов и производимым действием при обнаружении
# определенного типа и имени
# allow/deny/deny+delete
Filename Rules = %etc-dir%/filename.rules.conf
Filetype Rules = %etc-dir%/filetype.rules.conf
#
# Reports and Responses
# Действия с потенциально опасными объектами, во многих случаях возможно использование файла правил.
# Использование карантина для зараженных сообщений
Quarantine Infections = yes
Quarantine Silent Viruses = no
# Копии сообщений с модифицированным HTML (вариант файл правил)
Quarantine Modified Body = no
# Сохранение всего сообщения или только зараженной части
Quarantine Whole Message = no
# Сохранение в оригинальном или удобочитаемом виде
Quarantine Whole Messages As Queue Files = no
# Сохранение зараженного спама или MCP
Keep Spam And MCP Archive Clean = no
# Файлы, содержащие сообщения, выдаваемые пользователю
Language Strings = %report-dir%/languages.conf
Deleted Bad Content Message Report = %report-dir%/deleted.content.message.txt
Deleted Bad Filename Message Report = %report-dir%/deleted.filename.message.txt
Deleted Virus Message Report = %report-dir%/deleted.virus.message.txt
Stored Bad Content Message Report = %report-dir%/stored.content.message.txt
Stored Bad Filename Message Report = %report-dir%/stored.filename.message.txt
Stored Virus Message Report = %report-dir%/stored.virus.message.txt
Disinfected Report = %report-dir%/disinfected.report.txt
Inline HTML Signature = %report-dir%/inline.sig.html
Inline Text Signature = %report-dir%/inline.sig.txt
Inline HTML Warning = %report-dir%/inline.warning.html
Inline Text Warning = %report-dir%/inline.warning.txt
Sender Content Report = %report-dir%/sender.content.report.txt
Sender Error Report = %report-dir%/sender.error.report.txt
Sender Bad Filename Report = %report-dir%/sender.filename.report.txt
Sender Virus Report = %report-dir%/sender.virus.report.txt
# Скрываем полный путь к каталогу, в который помещен вирус. Эта опция может понадобиться для сокрытия
# настроек системы
Hide Incoming Work Dir = yes
# Включение имени сканера в отчеты
Include Scanner Name In Reports = yes
# Добавление дополнительных заголовков и конвертов к обработанной почте (возможно использование файла правил)
Mail Header = X-%org-name%-MailScanner:
Spam Header = X-%org-name%-MailScanner-SpamCheck:
Spam Score Header = X-%org-name%-MailScanner-SpamScore:
Information Header = X-%org-name%-MailScanner-Information:
Add Envelope From Header = yes
Add Envelope To Header = no
Envelope From Header = X-%org-name%-MailScanner-From:
Envelope To Header = X-%org-name%-MailScanner-To:
# Символ, который будет использоваться для вывода оценки спамовости сообщения. Установка x при значении 3 может
# быть воспринята неправильно, т.е. xxx, некоторые другие знаки #, @, *, ?, точка могут вызвать проблемы
# с procmail и др.
Spam Score Character = s
# Вставка оценки спама в сообщение
SpamScore Number Instead Of Stars = no
# Минимальное число оценки спама, вставляемое в сообщение
Minimum Stars If On Spam List = 0
# Заголовок clean/infected/disinfected сообщений
Clean Header Value = Found to be clean
Infected Header Value = Found to be infected
Disinfected Header Value = Disinfected
Information Header Value = Please contact the ISP for more information
# Полный отчет о спаме
Detailed Spam Report = yes
# Оценка SpamAssassin или просто название
Include Scores In SpamAssassin Report = yes
# Включение отчета о спаме в любом случае, даже если спам обнаружен не был
Always Include SpamAssassin Report = no
# Тесты MailScanner могут добавлять свои заголовки в сообщение. Здесь указывается, как поступать с такими
# заголовками. Варианты: «append», «add или «replace»
Multiple Headers = append
# Имя узла, если требуется скрыть реальное
Hostname = the %org-name% ($HOSTNAME) MailScanner
# Подпись сообщения уже обработанного другой копией MailScanner
Sign Messages Already Processed = no
# Добавление «Inline HTML Signature» или «Inline Text Signature» в очищенное сообщение
Sign Clean Messages = yes
Mark Infected Messages = yes
# Маркировать ли не просканированные антивирусом сообщения?
Mark Unscanned Messages = yes
# И текст такой маркировки
Unscanned Header Value = Not scanned: please contact your Internet E-Mail Service Provider for details
# Все заголовки в сообщении, содержащие эти строки, будут удалены. Опция может быть полезна при удалении
# сообщения о доставке или прочтении сгенерированных почтовым клиентом
Remove These Headers = X-Mozilla-Status: Disposition-Notification-To: Return-Receipt-To
# Доставлять ли очищенные от вирусов сообщения
Deliver Cleaned Messages = yes
# Отправка уведомления отправителю о том, что в сообщении содержится вирус или файл с подозрительным именем.
# Лучше использовать файл с правилами, где указать своих корреспондентов
Notify Senders = yes
# Опция, переопределяющая предыдущую, при установке в no сообщения отправителям об обнаруженном вирусе отсылаться
# не будет. Учитывая, что обратный адрес часто подделывается, лучше оставить, как есть. Вариант –
# использование файла правил
Notify Senders Of Viruses = no
# Сообщение о блокировании файла по имени или типу
Notify Senders Of Blocked Filenames Or Filetypes = yes
# И всего прочего
Notify Senders Of Other Blocked Content = yes
Never Notify Senders Of Precedence = list bulk
# Опции изменения поля Subject могут использоваться для удобства фильтрации в почтовом клиенте.
# Варианты no, start (добавить в начало) и end. Все варианты поддерживают правила
Scanned Modify Subject = no # end
# Здесь текст, добавляемый к Subject
Scanned Subject Text = {Scanned}
# Сообщение о вирусе, добавляемое в тему
Virus Modify Subject = yes
Virus Subject Text = {Virus?}
# Сообщение о проверке имени файла
Filename Modify Subject = yes
Filename Subject Text = {Filename?}
# Проверке содержимого
Content Modify Subject = yes
Content Subject Text = {Dangerous Content?}
# О нейтрализации HTML
Disarmed Modify Subject = yes
Disarmed Subject Text = {Disarmed}
# О подделке адреса
Phishing Modify Subject = no
Phishing Subject Text = {Fraud?}
# О спаме
Spam Modify Subject = yes
# Значение «_SCORE_» будет заменен числовой оценкой
# SpamAssassin.
# Строка «_STARS_» будет заменена звездочками
Spam Subject Text = {Spam?}
# То же, что и предыдущее, но только при превышении значения «High SpamAssassin Score»
High Scoring Spam Modify Subject = yes
High Scoring Spam Subject Text = {Spam?}
# Изменения в теле сообщения. Многие опции допускают использование файла правил. Предупреждение об удалении
# записывается в само сообщение или присоединяется к файлу
Warning Is Attachment = no
# Имя файла такого вложения.
Attachment Warning Filename = %org-name%-Attachment-Warning.txt
Attachment Encoding Charset = СР-1251
# Архивирование и мониторинг почты.
# Указывается почтовый адрес, каталог или имя файла.
# Возможно добавление переменных в имени вроде _DATE_, которая будет заменена текущим временем.
# Можно использовать правила
#
Archive Mail = /var/spool/MailScanner/archive
# Предупреждения локальному администратору.
# Можно использовать правила
Send Notices = yes
Notices Include Full Headers = yes
Hide Incoming Work Dir in Notices = no
Notice Signature = -- \nMailScanner\nEmail Virus Scanner\nwww.mailscanner.info
# Поле «From:»
Notices From = MailScanner
Notices To = postmaster
Local Postmaster = postmaster
# Имена файлов, транслирующих имена spam-списков и областей в реальные области DNS. Другие варианты можно поискать
# http://www.declude.com/JunkMail/Support/ip4r.htm
Spam List Definitions = %etc-dir%/spam.lists.conf
Virus Scanner Definitions = %etc-dir%/virus.scanners.conf
# Проверка на спам по адресу отправителя. Везде можно использовать правила. Отключение следующей опции приведет
# к остановке проверки на спам как самим MailScanner, так и SpamAssassin
Spam Checks = yes
# Выбор используемого spam blacklists (RBLs)
# Смотри файл указанный в «Spam List Definitions»
Spam List = ORDB-RBL SBL+XBL SORBS-DNSBL CBL RSL DSBL spamcop
Spam Domain List = RFC-IGNORANT-DSN
# Число одинаковых сообщений, начиная с которого они будут рассматриваться как спам,
Spam Lists To Be Spam = 1
Spam Lists To Reach High Score = 3
Spam List Timeout = 10
Max Spam List Timeouts = 7
Spam List Timeouts History = 10
# «Белый список». Сообщения, принятые с попавших в этот список узлов, не будут рассматриваться как спам
#Is Definitely Not Spam = no
Is Definitely Not Spam = %rules-dir%/spam.whitelist.rules
# «Черный список» узлов спамеров. Эта величина переопределяется значением «Is Definitely Not Spam».
# При no все, не вошедшие в 1 список, являются потенциальными спамерами
# Is Definitely Spam = %rules-dir%/spam.blacklist.rules
Is Definitely Spam = no
Definite Spam Is High Scoring = no
# Если количество получателей превышает число, то «белый список» игнорируется, и письмо обрабатывается обычным
# образом
Ignore Spam Whitelist If Recipients Exceed = 20
# Использование SpamAssassin.
# Можно применить правила и обработать письма более тонко
Use SpamAssassin = yes
# Если письмо превышает указанный размер (в байтах), SpamAssassin просматривать его не будет.
# Письма спамеров редко бывают большими, а рисунки и др. определяются другими опциями
Max SpamAssassin Size = 30000
# Переопределение значения «required_hits», если оценка достигает его – это спам
Required SpamAssassin Score = 6
High SpamAssassin Score = 10
# Включение автоматического «белого списка», функции доступной в SpamAssassin, начиная с версии 3.0. Подробности в [3]
SpamAssassin Auto Whitelist = no
SpamAssassin Prefs File = %etc-dir%/spam.assassin.prefs.conf
SpamAssassin Timeout = 75
Max SpamAssassin Timeouts = 10
SpamAssassin Timeouts History = 30
# Проверять ли сообщение, если оно находится в спам-списке
Check SpamAssassin If On Spam List = no
# Включение оценки спама в сообщение
Spam Score = yes
# Перестройка Bayesian-статистики.
# 0 отключает такую возможность. Например, перестройка раз в сутки
Rebuild Bayes Every = 86400
# Отключение проверки на время перестройки
Wait During Bayes Rebuild = no
# В этом разделе описываются параметры работы Custom Spam Scanner, написанного самим пользователем.
# Подробности в lib/MailScanner/CustomFunctions/GenericSpamScanner.pm
Use Custom Spam Scanner = no
# Что делаем со спамом?
Spam Actions = deliver
High Scoring Spam Actions = deliver
Non Spam Actions = deliver
# Файлы с сообщениями, выдаваемыми пользователю
Sender Spam Report = %report-dir%/sender.spam.report.txt
Sender Spam List Report = %report-dir%/sender.spam.rbl.report.txt
Sender SpamAssassin Report = %report-dir%/sender.spam.sa.report.txt
Inline Spam Warning = %report-dir%/inline.spam.warning.txt
Recipient Spam Report = %report-dir%/recipient.spam.report.txt
Enable Spam Bounce = %rules-dir%/bounce.rules
Bounce Spam As Attachment = no
# Настройка параметров журналирования. Включать большую часть лучше только при отладке. Следующая опция
# определяет взаимодействие с syslog
Syslog Facility = mail
Log Speed = no
Log Spam = no
Log Non Spam = no
Log Permitted Filenames = no
Log Permitted Filetypes = no
Log Silent Viruses = no
Log Dangerous HTML Tags = no
# Настройка некоторых параметров SpamAssassin.
# Может понадобиться, если SpamAssassin установлен в другой каталог или процесс не может получить доступ к файлам.
# Параметры понятны, приводиться не будут
# Настройки MCP
MCP Checks = no
# Что проверяется первым: spam или mcp
First Check = mcp
# Ниже идут опции, значение которых аналогично таковым при проверке на спам, приводиться они не будут
header_checks = regexp:/etc/postfix/header_checks
/^Received:/ HOLD
# /etc/init.d/postfix start
# /opt/MailScanner/bin/check_mailscanner
-----------------------------------------------------------------------------------------------------------------
Настраиваем Cisco PIX Firewall 520 для трансляции соединений между сетями
Малик Абдугалыев
pix> enable
pix# configure terminal
pix(config)# hostname pix-gtw
pix-gtw(config)# domain-name my.domain.tld
pix-gtw(config)# clock timezone KGT +6
pix-gtw(config)# clock set 11:59:00 09 dec 2005
pix-gtw(config)# [Ctrl - Z]
pix-gtw# write mem
pix-gtw# quit
# domain-name my.domain.tld
pix-gtw(config)# ca zeroize rsa
pix-gtw(config)# ca generate rsa key 512
pix-gtw(config)# ca save all
show ca mypubkey rsa
write mem
write net 192.168.255.2:pix-gtw
interface ethernet0 auto
interface ethernet1 auto
interface ethernet2 auto
interface ethernet3 auto shutdown
nameif ethernet0 outside security0
nameif ethernet1 inside security100
nameif ethernet2 www security20
nameif ethernet3 not_used security25
ip address outside 1.2.3.246 255.255.255.252
ip address inside 192.168.255.1 255.255.255.252
ip address www 192.168.255.5 255.255.255.252
access-group 101 in interface outside
access-list 101 permit tcp host 4.5.6.100 any eq 22
access-list 101 deny tcp any any eq 22
access-list 101 permit ip any any
route имя_интерфейса сеть маска шлюз [метрика]
route outside 0.0.0.0 0.0.0.0 1.2.3.245
icmp permit 3.4.5.0 255.255.255.0 outside
icmp permit host 4.5.6.100 outside
icmp permit any unreachable outside
icmp permit any time-exceeded outside
icmp permit any inside
icmp permit any www
ssh pix@192.168.255.1
ssh 4.5.6.100 255.255.255.255 outside
ssh 192.168.255.2 255.255.255.255 inside
logging on
logging trap warnings
logging facility 23
logging device-id string pix-gtw
logging host inside 192.168.255.2
local7.* /var/log/pix.log
nat 0 access-list
show nameif
clear xlate global 1.2.3.246
clear xlate local 192.168.255.6 lport 80
global (outside) 1 interface
nat (inside) 1 192.168.255.2 255.255.255.255
static (локальный_интерфейс, глобальный_интерфейс) протокол глобальный_адрес локальный_адрес
static (inside,outside) tcp interface 25 192.168.255.2 25
static (inside,outside) tcp interface 20 192.168.255.2 20
static (inside,outside) tcp interface 21 192.168.255.2 21
static (inside,outside) udp interface 53 192.168.255.2 53
static (inside,outside) tcp interface 222 192.168.255.2 22
ssh -p 222 malik@1.2.3.246
ssh pix@1.2.3.246
access-list 101 permit tcp any host 1.2.3.246 eq 20
access-list 101 permit tcp any host 1.2.3.246 eq 21
access-list 101 permit tcp any host 1.2.3.246 eq 25
access-list 101 permit udp any host 1.2.3.246 eq 53
access-list 101 permit tcp host 4.5.6.100 host 1.2.3.246 eq 222
static (www,outside) tcp interface 80 192.168.255.6 80
access-list 101 permit tcp any host 1.2.3.246 eq 80
static (www,inside) tcp 1.2.3.246 80 192.168.255.6 80
nat (inside) 0 access-list 110
access-list 110 permit ip 10.0.1.0 255.255.255.0 host 192.168.255.6
access-list 110 permit ip host 192.168.255.2 host 192.168.255.6
route inside 10.0.1.0 255.255.255.0 192.168.255.2
static (inside,outside) tcp 1.2.4.1 80 192.168.0.1 80
static (inside,outside) tcp 1.2.4.2 80 192.168.0.2 80
global (outside) 1 1.2.4.1
global (outside) 2 1.2.4.2
nat (inside) 1 192.168.0.1 255.255.255.255
nat (inside) 2 192.168.0.2 255.255.255.255
static (inside,outside) 1.2.4.1 192.168.0.1
static (inside,outside) 1.2.4.2 192.168.0.2
-----------------------------------------------------------------------------------------------------------------
Печатаем документы с веб-сервера
Дмитрий Острецов
fl..
fl.ft.Total
01: include('OODocFiller.php');
02:
03: // Подключаем макет
04: $doc = new OODocFiller('template.sxw');
05: // Задаем параметры
06: $doc->SetParameter("RowElement", 'text:p');
07: $doc->SetParameter("Encoding", "WINDOWS-1251");
08:
09: // Определяем поля в начальной части
10: $hdr = &$doc->GetHeaderPart("Number", "Date", "Byer");
11: // Определяем поля в 2 типах строк табличной части
12: // (С белым и серым фоном)
13: $row1 = &$doc->GetNewRow("tb1", "Description", "Numb", "Price", "Amount");
14: $row2 = &$doc->GetNewRow("tb2", "Description", "Numb", "Price", "Amount");
15: // Определяем поле в конечной части
16: $ftr = &$doc->GetFooterPart("Total");
17:
18: // Формирование документа
19: // Заполняем начальную часть
20: $hdr->Fill("12", "1.10.2005", "И.И. Иванов");
21: // Заполняем табличную часть
22: // Виды строк чередуются для «полосатости»
23: $row1->Fill("Сапоги»,"2","12,50", "25,00");
24: $row2->Fill("Пироги»,"1","10,00", "10,00");
25: $row1->Fill("Плюшки»,"10","1,00", "10,00");
26: $row2->Fill("DVD+R","1","5,00", "5,00");
27: // Заполняем конечную часть
28: $ftr->Fill(«50,00»);
29: // Остается только сохранить сформированный документ в файл
30: if($doc->Error == ""){
31: $fd = fopen ("report.sxw", "wb");
32: $out = fwrite ($fd, $doc->GetBinaryResult());
33: fclose($fd);
34: }
35: else{
36: print "Error: ".$doc->Error;
37: }
$content = file_get_contents("report.sxw");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-type: application/vnd.sun.xml.writer");
header("Content-Disposition: attachment; filename=report.sxw;");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize("report.sxw"));
print $content;
<путь к исп.файлам OO>\SOFFICE.EXE –pt"<принтер>" <документ>
<путь к исп.файлам OO>\SOFFICE.EXE –p <документ>
x1:5:respawn:/usr/X11R6/bin/xinit /usr/X11R6/bin/xclock -- /usr/X11R6/bin/Xorg :1
<путь к исп.файлам OO>/soffice -display :1 –p <документ>
Sub ConvertWordToPDF( cFile )
On Error GoTo ErrHandler
' Открываем файл
cURL = ConvertToURL( cFile )
oDoc = StarDesktop.loadComponentFromURL(cURL, "_blank", 0, Array(MakePropertyValue( "Hidden", True ),))
' Получаем имя для PDF-файла
cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf"
' Сохраняем через PDF-фильтр
cURL = ConvertToURL( cFile )
oDoc.storeToURL( cURL, Array(MakePropertyValue( "FilterName", "writer_pdf_Export" ),)
oDoc.close( True )
ExitSub:
Exit Sub
ErrHandler:
Shell("logger", 6, "-t ooffice ConvertWordToPDF: " + Error$)
End Sub
Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue
Dim oPropertyValue As New com.sun.star.beans.PropertyValue
If Not IsMissing( cName ) Then
oPropertyValue.Name = cName
EndIf
If Not IsMissing( uValue ) Then
oPropertyValue.Value = uValue
EndIf
MakePropertyValue() = oPropertyValue
End Function
#!/bin/bash
# Первый параметр – имя принтера, второй – имя (лучше полное) SXW-файла.
Printer=$1
# Получаем имя для PDF-файла
PDFname=${2/.sxw/.pdf}
# Внимание, замените :1 на номер графического дисплея, который вы указали в inittab
# Если вы назвали свою библиотеку не Example, то не забудьте подправить и это
/usr/lib/ooo-1.1/program/soffice -display :1 "macro:///Example.Print.ConvertWordToPDF($2)"
# В предыдущей строке мы создали PDF-файл с тем же именем (кроме суффикса) и в том же месте, что и SXW
# А теперь печатаем PDF
lp -s -d $Printer $PDFname
# Удаляем PDF
rm $PDFname
ooprint myprinter report.sxw
-----------------------------------------------------------------------------------------------------------------
Многоликий Apache. Размещаем несколько сайтов на одном веб-сервере
Павел Малахов
# mkdir /var/www/html/teo /var/www/html/logos
# mkdir /var/log/httpd/teo /var/log/httpd/logos
NameVirtualHost 10.0.10.15
DocumentRoot /var/www/html/teo
ServerName teo.mynetwork.ru
ErrorLog /var/log/httpd/teo/error_log
CustomLog /var/log/httpd/teo/access_log combined
DocumentRoot /var/www/html/logos
ServerName logos.mynetwork.ru
ErrorLog /var/log/httpd/logos/error_log
CustomLog /var/log/httpd/logos/access_log combined
# /etc/init.d/httpd restart
ServerAlias www.teo.mynetwork.ru
ServerAlias *.teo.mynetwork.ru
ServerAlias www.teo.mynetwork.ru god.mynetwork.ru pantheon.ru
DocumentRoot /var/www/html/pantheon
ServerName pantheon.ru
ErrorLog /var/log/httpd/pantheon/error_log
CustomLog /var/log/httpd/pantheon/access_log combined
Redirect / http://teo.mynetwork.ru
Redirect /samag http://samag.ru
Redirect /ftp/ ftp://citkit.ru/pub/
Redirect /find/ya.htm http://yandex.ru
DocumentRoot "/var/www/html/default"
...
# This should be changed to whatever you set DocumentRoot to
DocumentRoot /var/www/html/logos
ServerName logos.mynetwork.ru
ErrorLog /var/log/httpd/logos/error_log
CustomLog /var/log/httpd/logos/access_log combined
Options +Indexes
Order deny,allow
Deny from all
Allow from 192.168.100.11
Allow from 192.168.100.17
AuthType Basic
AuthName "Boss"
AuthUserFile "/var/www/main_users"
Require valid-user
Options +Indexes
Order deny,allow
Deny from all
Allow from 192.168.100.11
Allow from 192.168.100.17
AuthType Basic
AuthName "Boss"
AuthUserFile "/var/www/main_users"
Require valid-user
# touch /var/www/main_users
# chown root.webmaster /var/www/main_users
# /usr/bin/htpasswd /var/www/main_users chef
Include /etc/httpd/conf/vhosts/teo.conf
Include /etc/httpd/conf/vhosts/logos.conf
Include /etc/httpd/conf/vhosts/pantheon.conf
-----------------------------------------------------------------------------------------------------------------
AJAX: заработавший JavaScript
Вячеслав Родионов
xmlHttp.open("GET", "http://ourserver.org/ajax_service.php",true);
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 4) {
var xmlData = this.responseText;
//здесь идёт обработка полученных данных
}
}
xmlHttp.overrideMimeType('text/xml');
xmlHttp.send(null);
Проверка почты с помощью новейших технологий
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
var xmlobject = (new DOMParser()).parseFromString(xmlData, "text/xml");
var root = xmlobject.getElementsByTagName('feed')[0];
var number = root.getElementsByTagName("fullcount");
alert(name+ ", количество писем в вашем ящике: " + number[0].firstChild.nodeValue);
Gmail - Inbox for Vasya_Pupkin@gmail.comNew messages in your Gmail Inbox1
...
-----------------------------------------------------------------------------------------------------------------
PHP: делаем отладку на стороне клиента, или Операции под наркозом
Серафим Пикалов
//---код скрипта
if (isset($_GET[‘debug’])) {
echo ‘Debug info!’;
}
//---код скрипта
If ($_SERVER[‘REMOTE_ADDR’]==='123.234.234.15') {
Echo ‘Debug info2!’;
}
if (!empty($_COOKIE[‘debug’])) {
echo ‘Debug info3!’;
}
if (!empty($_COOKIE['DBG'])
&&($_SERVER[‘REMOTE_ADDR’]=== '123.234.234.15')) {
echo ‘Debug4’;
}
if ( ( time() - filemtime(__FILE__) ) < BLOCK_LIFE_TIME) {
//…
}
If (is_debug()) {
Function debug_eh($errno, $errstr, $errfile, $errline, $errcontext) {
/*вывод необходимой информации*/
print_r(debug_backtrace());
print_r($GLOBALS);
print_r($error_context);
}
$eh=set_error_handler(‘debug_eh’);
}
// место перед возникновением ошибки
If (is_debug()) {
set_error_handler($eh);
}
');
}
case 'bp': {
// Выставляем точку остановки
list($STOP_LINE,$STOP_FILE)=split(':',substr($ret,3,strlen($ret)-4));
break;
}
case “g\n”: {
// Так как необходимо выполнить скрипт до конца без остановки,
// убираем вызов функции отладки
unregister_tick_function ('debug_func');
break;
}
case “s\n”:
default: {
break;
}
}
}
//подключаемся к серверу управления отладкой
$fp = fsockopen('10.0.2.145', 9998);
register_tick_function('debug_func'); //включаем отладчик
declare (ticks=1);
/*Код программы*/
fclose($fp);
?>
// Начало такое же
// Функция посылки сообщения о процессе отладки
function D_write($msg) {
// Для простоты будем считать, что такой вывод не нарушит структуру документа
echo "";
}
// Функция принятия сообщения от отладчика
function D_read() {
global $fp;
while (!file_exists($fp)) ;
// Думаю, длина команды не более 600 байт
return fread($fp, 600);
}
// debug_func() практически не изменился, за исключением того, что после обработки полученной команды
// необходимо зачистить (удалить) файл с командой, чтобы она повторно не обрабатывалась
// Вместо сокета открываем файл
$fp = fopen('dbg_cmd.txt', 'r');
// Вставляем управляющие элементы в начало скрипта.
// В ajax.js помещаем AJAX-движок с функцией Send2Dbg(cmd) отправки команды скрипту dbgfile.php, который создаёт
// dbg_cmd.txt и пишет туда команду
echo ""
echo '