Работа с Dos командами.

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
3apadlo
Сообщения: 4
Зарегистрирован: 19 янв 2007, 14:55

Собственно задача:
Определение наличия связи между двумя хостами при помощи интегрированного инструментария MS-DOS, анализ log-файла результатов отправки пакетов на удаленный адрес, определение последовательности действий(условие) на основе анализа log-файла(т.е. есть соединение/нет соединения). Предпологается, что процедуру отправки пакетов будет выполнять исполняемый пакетный bat-файл при помощи инструмента "ping" с параметрами -n 4, что означает отправку 4 ICMP-запросов и запись результатов(т.е. ответов) программы в файл, например - ping xxx.xxx.xxx.xxx -n 4 >> xxx.log(команда из пакетного файла). Содержание log-файла после выполнения данной команды будет примерно следующим:

Обмен пакетами с xxx.xxx.xxx.xxx по 32 байт:

Ответ от xxx.xxx.xxx.xxx: число байт=32 время<10мс TTL=128
Ответ от xxx.xxx.xxx.xxx: число байт=32 время<10мс TTL=128
Ответ от xxx.xxx.xxx.xxx: число байт=32 время<10мс TTL=128
Ответ от xxx.xxx.xxx.xxx: число байт=32 время<10мс TTL=128

Статистика Ping для xxx.xxx.xxx.xxx:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время передачи и приема:
наименьшее = 0мс, наибольшее = 0мс, среднее = 0мс

Далее следует команда DOS - find с параметрами /C "xxx.xxx.xxx.xxx" xxx.log >> xxx.log. Что в свою очередь добавляет в конец log-файла строку ---------- XXX.LOG: 6

Т.к. пакетов на адрес xxx.xxx.xxx.xxx было послано 4 + 1 строка "информационная"+ 8 строка "статистика", где в содержании этих строк присутствует xxx.xxx.xxx.xxx получаем 6(max) совпадений, либо при отсутствии связи получаем 2(min) совпадения, либо при утере n кол-ва пакетов получим цифру(y) y=max-n соответственно. Другими словами последняя цифра в последней строке log-файла всегда будет однозначно свидетельствовать о том, есть ли соединение(6,5,4,3) или его нет(2) вообще.
Следующий этап. Необходимо из данного log-файла извлечь последнюю цифру записанную командой find. Причем, необходимо извлечь именно последнюю цифру, а не перенаправить вывод команды в какую то переменную(т.е. целой строки). Затем присвоить эту цифру в переменную для дальнейших операций над ней.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

while not eof(f) do
readln(f,s);
delete(s,1,pos(':',s));
x:=inttostr(s);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
3apadlo
Сообщения: 4
Зарегистрирован: 19 янв 2007, 14:55

Спасибо. Буду разбираться.
Ответить