PDA

Показать полную графическую версию : Win32_PingStatus или что-нибудь другое


semen77
06-03-2013, 14:37
Везде, где только не искал, проверка доступности интернета (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

Iska
06-03-2013, 15:31
Потому что этот, так же как и, просто 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
'=============================================================================

semen77
06-03-2013, 15:47
Почему Вы так решили? »
Я тестировал оба варианта на виртуалках с nat-ом
P.S.: а вот и ваш вариант:

http://i.imgur.com/lzdv7iK.png

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

Iska
06-03-2013, 15:55
semen77, ну, так дело ж не в NAT получается, а в непрохождении пакетов определённого вида, как Вы верно заметили. Пинайте своего администратора.

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




© OSzone.net 2001-2012