Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Win32_PingStatus или что-нибудь другое

Ответить
Настройки темы
VBS/WSH/JS - Win32_PingStatus или что-нибудь другое

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


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


Конфигурация

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


Изменения
Автор: semen77
Дата: 06-03-2013
Описание: -
Везде, где только не искал, проверка доступности интернета (VBS+WMI) производится с помощью:
Код: Выделить весь код
"...FROM Win32_PingStatus..."
Вопрос: а есть другие варианты?
Потому что этот, так же как и, просто CMD-команда:
Код: Выделить весь код
ping www.google.com
Не будут корректно работать если ОС находится за NAT-ом.
Задача: проверить доступность www.google.com
Условие: компьютер находится за NAT

Пример скрипта:
Код: Выделить весь код
iPing = Ping("www.google.com")

If iPing=0 Then
  WScript.Echo "Интернет есть"
Else
  WScript.Echo "Интернета НЕТ"
End If

Function Ping (strTarget)
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & strTarget & "'")

  For Each objPing in colPings
    Ping = objPing.StatusCode
  Next
End Function

Отправлено: 14:37, 06-03-2013

 

Ветеран


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

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


Цитата semen77:
Потому что этот, так же как и, просто CMD-команда:
Код: Выделить весь код
ping www.google.com
Не будут корректно работать если ОС находится за NAT-ом. »
Почему Вы так решили?

P.S. Лучше использовать такой код:
читать дальше »
Код: Выделить весь код
Option Explicit

If IsConnected("www.google.com") Then
	' Place your code here…
End If

WScript.Quit 0
'=============================================================================

'=============================================================================
Function IsConnected(strAddress)
	Dim objSWbemObjectEx
	
	IsConnected = False
	
	For Each objSWbemObjectEx In GetObject( _
		"winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery( _
		"SELECT * FROM Win32_PingStatus WHERE Address = '" & strAddress & "'")
		
		With objSWbemObjectEx
			If Not IsNull(.StatusCode) And .StatusCode = 0 Then
				IsConnected = True
			End If
		End With
		
		Exit For
	Next
	
	Set objSWbemObjectEx = Nothing
End Function
'=============================================================================

Отправлено: 15:31, 06-03-2013 | #2



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

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


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


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

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


Цитата Iska:
Почему Вы так решили? »
Я тестировал оба варианта на виртуалках с nat-ом
P.S.: а вот и ваш вариант:


Знаю, что проблема связана с трансляцией ICMP-пакетов, но может быть уже кто-то решил её?

Отправлено: 15:47, 06-03-2013 | #3


Ветеран


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

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


semen77, ну, так дело ж не в NAT получается, а в непрохождении пакетов определённого вида, как Вы верно заметили. Пинайте своего администратора.

Отправлено: 15:55, 06-03-2013 | #4


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


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

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


Цитата Iska:
а в непрохождении пакетов определённого вида »
Это "стандартная болезнь" архитектуры NAT, которая умеет правильно транслировать только TCP и UDP пакеты.
Поэтому и спрашивал - может кто-то уже придумал "костыли"...

Отправлено: 16:05, 06-03-2013 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Win32_PingStatus или что-нибудь другое

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Из за монитора ли? или что то другое Поляков Андрей Непонятные проблемы с Железом 4 15-01-2013 18:45
[решено] Статическое электричество или что-то другое? Murman Материнские платы и память 9 22-11-2009 01:19
Ошибка - Ошибка explorer.exe или что-то другое? Palomnik Microsoft Windows 2000/XP 4 19-11-2009 12:40
*** pgv530 Хочу все знать 5 13-11-2008 18:41
БИОС или что то другое??? trion Материнские платы и память 16 20-08-2005 21:07




 
Переход