Как эффективно провести инвентаризацию установленного софта Андрей Бирюков Листинг 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.com New messages in your Gmail Inbox 1 ... ----------------------------------------------------------------------------------------------------------------- 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 '
'; echo 'STOP '; echo 'GO '; // и т.д. echo '
'; echo '
'; // Далее всё так же ----------------------------------------------------------------------------------------------------------------- TCP поверх TCP – не такая уж плохая идея! Алексей Барабанов # traceroute 192.168.11.2 # cat /etc/openvpn/test.conf proto tcp-client tcp-queue-limit 1000 remote 192.168.11.2 dev tun port 5000 tcqueuelen 1000 secret /etc/openvpn/static.key ifconfig 192.168.12.1 192.168.12.2 route 192.168.12.0 255.255.255.0 192.168.12.1 # traceroute 192.168.12.2 # traceroute 192.168.11.2 # ssh tovert@wstovert "dd if=/dev/urandom of=~/100M.bin bs=1024 count=102400" # dd if=/home/tovert/100M.bin bs=1024 count=102400 >>/dev/null # dd if=/home/tovert/100M.bin bs=1024 count=102400 | ssh tovert@192.168.12.2 "cat - >>/dev/null" # dd if=/home/tovert/100M.bin bs=1024 count=102400 >>/dev/null # dd if=/home/tovert/100M.bin bs=1024 count=102400 | netcat -vu -w 1 192.168.12.2 22222 # netcat -vlnu -s 192.168.12.2 -w 15 -p 22222 | wc -c qdisc htb 1: r2q 10 default 0 direct_packets_stat 0 Sent 0 bytes 0 pkts (dropped 0, overlimits 0) class htb 1:1 root rate 10Mbit ceil 10Mbit burst 14704b cburst 14704b Sent 0 bytes 0 pkts (dropped 0, overlimits 0) lended: 0 borrowed: 0 giants: 0 tokens: 9191 ctokens: 9191 class htb 1:10 parent 1:1 prio 0 rate 10Mbit ceil 10Mbit burst 14704b cburst 14704b Sent 0 bytes 0 pkts (dropped 0, overlimits 0) lended: 0 borrowed: 0 giants: 0 tokens: 9191 ctokens: 9191 filter parent 1: protocol ip pref 1 fw filter parent 1: protocol ip pref 1 fw handle 0xa classid 1:10 # traceroute 192.168.11.2 # iptables -L INPUT # iptables -n -L OUTPUT ----------------------------------------------------------------------------------------------------------------- bugtraq, стр. 83 http://www.example.xom/_vti_bin/.dll/*\~0 %01-%1f, %3f, ", *, :, <, >