Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Тестирование сетки.

Ответить
Настройки темы
CMD/BAT - [решено] Тестирование сетки.

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Возникла необходимость тестировать сеть, чтобы определить работающее оборудование.
Имеется Excel-ский файл, состоит из нескольких столбцов. В 14 столбце занесены IP адреса. Нужно взять IP, пингануть и результат пингов записать в следующий столбец т.е сформировать 15 столбец с результатами, если хоть один пинг прошёл то результат ОК, если нет то строку оставить пустым. Затем переход на следующую строку.
и так до конца столбца. Всего 1000 строк. Желательно, чтобы можно былобы регулировать количество пингов.
Буду очень признателен за помощь.

Отправлено: 15:32, 12-10-2010

 

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman Разобрался, для было уровне безопасности, поставил низкую заработала.
Но осталось ещё одна проблема. При любом пинге, есть оборудование нет его - результат ОК.
Специально ввёл несуществующие IP, результат проверки ОК.
Вижу запускается командная строка в ней пингование и вижу что нет ответа, но в строчке результат ОК
Что же это может быть?

Последний раз редактировалось a139st, 15-10-2010 в 11:19.


Отправлено: 11:01, 15-10-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


Понятненько - если пингов несколько - результат положительный, если узел был досупен хоть раз.
В макросе думаю проблема в том, что возвращается код завершения CMD.EXE, а не самого PING. Попробуйте, выполнит ли макрос саму команду Ping без CMD

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 13:18, 15-10-2010 | #12


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нет не выполняет, Даёт ошибку.
Я сделал так: в макросе удалил команду cmd, и запустил макрос. Правильно?
А как можно пустить пинг без cmd? в фоновом режиме?

Отправлено: 13:40, 15-10-2010 | #13


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Ret = WS.Run("Ping " + ip, 1, True)
Но у меня ведь работает! Правильно. И с CMD и без него

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 14:08, 15-10-2010 | #14


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Мои действия были такие:
Сохранил файл который вы выслали. Из трёх IP два заменил на мои рабочие и удалил содержимое 15 столбца.
Запустил макрос, открылcя cmd вижу как идут пинги, первые два прошли успешно, а третий не прошёл.
А после завершения макроса результат все три IP ОК.
Может есть какие мысли? что не так делаю?

Если во время пингования я закрою окошко cmd командной строки (т.е. просто нажимаю крестик), то результат везде Err.

Отправлено: 15:08, 15-10-2010 | #15


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Похоже, во всём виноват Windows. Проверил на Win XP, 2003 -работает. Win 2000 (у меня сервер) - увы. Там пинг по любому выдаёт ErrorLevel=0. Ни мой макрос, никакой батник с ping-ом и дальнейшей проверкой на ErrorLevel там работать не будут.
Цитата:
Если во время пингования я закрою окошко cmd командной строки (т.е. просто нажимаю крестик), то результат везде Err.
- это как раз свидетельствует о том, что макрос отрабатывает, просто пинг не выдаёт ErrorLevel<>0 при отсутствии ответа.
Попробуйте запустить вот такой батник для имеющегося адреса и отсутствующего. Подозреваю, ErrorLevel в обоих случаях = 0
Код: Выделить весь код
@Echo Off 
Cls
Set ip=192.168.0.5

ping %ip%
Echo ---------------------------------
echo %ip%  ErrorLevel=%ErrorLevel%
Echo ---------------------------------
Pause
А уровень безопасности лучше сделать средний- чтобы Excel спросил, отключить макрос или нет.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 15-10-2010 в 19:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:10, 15-10-2010 | #16


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Похоже, во всём виноват Windows. Проверил на Win XP, 2003 -работает. Win 2000 (у меня сервер) - увы. Там пинг по любому выдаёт ErrorLevel=0. Ни мой макрос, никакой батник с ping-ом и дальнейшей проверкой на ErrorLevel там работать не будут. »
К сожалению, помнится, было именно так. Если не пугают сторонние компоненты (в WMI в 2000 класс «Win32_PingStatus» тоже, к сожалению, отсутствует) — попробуйте метод «.Ping()» объекта «IPNetwork» из комплекта «System Scripting Runtime 1.5»:

читать дальше »
Цитата:
Ping Method (IPNetwork Object)

The Ping method sends an ICMP echo request to the specified host and returns information about the response, if one is received.


Long =
oIPNetwork.Ping(
Destination,
ResponseTime,
SourceOfResponse,
Timeout,
TTL,
BufferSize
)



Parameters

Destination as String
String containing the name or the IP-address of the host to ping.

(optional) ResponseTime as Variant
A Variant variable of sub-type Long which returns the number of milliseconds passed between sending the echo request and receiving the response. The variable will only hold a value if the method returns sscPingSuccess (=0), sscPingDestinationUnreachable (=10) or sscPingTimeExceeded (=20).

(optional) SourceOfResponse as Variant
A Variant variable of sub-type String which returns the IP-address from which the received response was sent. The variable will only hold a value if the method returns sscPingSuccess (=0), sscPingDestinationUnreachable (=10) or sscPingTimeExceeded (=20).

(optional) Timeout as Long
Number of milliseconds the method will wait for a response before it returns with sscPingTimeout (=30). If this parameter is not specified, a timeout value of 1000 milliseconds will be used.

(optional) TTL as Long
Time-to-Live (1-255) value of the echo request packet. If this parameter is not specified, the system default value (NT 4.0: 128) will be used.

(optional) BufferSize as Long
Size in bytes (1 - 64000) of dummy data to be contained in the echo request packet. If this parameter is not specified, a buffer size of 32 will be used.

Return Value

The method returns one of the following result codes:
Result Code Description
sscPingSuccess = 0 A valid ICMP Echo Response packet has been received.
sscPingDestinationUnreachable = 10 An ICMP Destination Unreachable packet has been received.
sscPingTimeExceeded = 20 An ICMP Time Exceeded packet has been received, which may be caused by a TTL value being too small.
sscPingTimeout = 30 No response has been received within the timeout period.
sscPingInvalidParameter = 100 On or more of the provided parameters contain an invalid value.
sscPingSocketError = 110 An WinSocket related error occurred.
sscPingInvalidHostAddress = 120 The specified host address (hostname or IP-address) is invalid.
Remarks

The response time is accurate to 10 milliseconds. This means that if the response time returned is 0, as many as 9 milliseconds may have passed.

The ping method uses the raw sockets feature of WinSock 2.x. On Windows NT 4.0 SP4+ and Windows 2000, the use of raw sockets is limited to administrators. This default behavior can be changed in case of Windows NT 4.0 but not in case of Windows 2000. More information can be found in KB-Article Q195445.

Отправлено: 04:19, 16-10-2010 | #17


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman Спасибо Вы оказались правы. Действительно на компьютере установлен Win 2000Server. Я тут и пробовал, он у меня имеет выход в инет.
Код я запустил вот результат:
Код: Выделить весь код
Set ip=192.168.0.5

ping %ip%

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

Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 192.168.0.5:
    Пакетов: отправлено = 4, получено = 0, потеряно = 4 (100% потерь),
Приблизительное время передачи и приема:
    наименьшее = 0мс, наибольшее =  0мс, среднее =  0мс
Echo ---------------------------------
---------------------------------
echo %ip%  ErrorLevel=%ErrorLevel%
192.168.0.5  ErrorLevel=0
Echo ---------------------------------
---------------------------------
Pause
А проверят мне нужно на другом компе, где установлен Win 2003Server.
Там всё действительно работает.

Если не тяжело можно будет дополнить макрос следующим образом:
После проверки IP, если результат ОК, то проверить IP на 1 больше, пример IP 192.168.2.2 результат ОК проверить IP 192.168.2.3 и результат проверки записать в 16 столбец. А потом переход на следующую строку. Если после проверки IP результат Err, то сразу переход на следующую строку.
Дело в том, что за одним оборудованием установлено ещё одно, IP которого отличается от главного на 1. Если главный IP не виден то второй проверять нет смысла.
Заранее благодарен за помощь!

Отправлено: 09:45, 18-10-2010 | #18


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Sub pinglan()
    Begin = "N3"    ' Клетка, с которой начинается просмотр адресов в таблице
    N_Uzl = 2       ' Число подузлов, отлич на единицу в последнем октете
    N_Ping = 8      ' Число запросов
    
    Set WS = CreateObject("WScript.Shell")
    
    ip = Range(Begin)
    i = 0
    Do While Len(Trim(ip)) <> 0
        ipm = Split(ip, ".")
        Range(Begin).Offset(i, 1) = "Тестирую ..."
        Range(Begin).Offset(i, 2) = ""
        Ret = WS.Run("cmd /C Ping -n " + CStr(N_Ping) + " " + ip, 0, True)
        
        Msg = CStr(Date) + " " + CStr(Time)
        Msg2 = ""
        If Ret = 0 Then
            Msg = Msg + " OK"
            For j = 1 To N_Uzl
                ip = CStr(ipm(0)) + "." + CStr(ipm(1)) + "." + CStr(ipm(2)) + "." + CStr(ipm(3) + j)
                Ret = WS.Run("cmd /C Ping -n " + CStr(N_Ping) + " " + ip, 0, True)
                Msg2 = Msg2 + ip
                If Ret = 0 Then Msg2 = Msg2 + "-OK " Else Msg2 = Msg2 + "-Err "
            Next
        Else
            Msg = Msg + " Err"
        End If
        Range(Begin).Offset(i, 1) = Msg
        Range(Begin).Offset(i, 2) = Msg2
        
        i = i + 1
        ip = Range(Begin).Offset(i, 0)
    Loop
End Sub

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:39, 18-10-2010 | #19


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё работает, Спасибо!
Только число подузлов у меня только один, и нет смысла пинговать второй подузел, его нет.
Для этого как нужно изменит код? Сделать N_Uzl = 1 , этого хватает или ещё что нужно поменять?
Измените пожалуйста код.

ещё одна просьба что нужно сделать чтобы тестирование проходило не в фоновом режиме, а наглядно видеть, т.е. окошко cmd? какая команда в коде? (Чтобы мог самостоятельно менять)

Отправлено: 10:34, 19-10-2010 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Тестирование сетки.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Route/Bridge - Схема сетки dmz Сетевые технологии 4 06-12-2010 20:28
Доступ к шаре из сетки Negativ Microsoft Windows NT/2000/2003 2 17-08-2010 17:45
Прочее - Схема небольшой сетки migel2007 Сетевые технологии 10 28-06-2008 01:42
создание сетки abramov4 Сетевые технологии 15 06-03-2006 13:31
Проблема со скоростью в сетки SanCho Сетевые технологии 7 14-11-2003 01:21




 
Переход