<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: класс для пинга для получения нескольких свойств]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8372</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8372&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: класс для пинга для получения нескольких свойств».]]></description>
		<lastBuildDate>Thu, 06 Jun 2013 12:34:20 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: класс для пинга для получения нескольких свойств]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72797#p72797</link>
			<description><![CDATA[<p>Выбросил из приведенного выше класса установку таймаута. </p><p>Зашел на свою тестовую XP, сильно удивился, что wmi-пинг вообще не срабатыват, методом тыка раскопал, что установка свойства &quot;TypeofService&quot; в строке Win32_PingStatus на моей XP приводит к неработоспособности создания пингового объекта - выбросил и эту строку &quot;AND TypeofService=16&quot;</p><p>Скрипт показывает на Вин7 (6.1.7600, Microsoft Windows 7 Enterprise) таймаут=<strong>4000</strong>, а на XP (5.1.2600, Microsoft Windows XP Professional, Service Pack 3) действительно = <strong>1000</strong>.</p><div class="codebox"><pre><code>
&#039;&#039;&#039;&#039; zzz_testPing_class.vbs

host = &quot;127.0.0.1&quot;

Do While true
    
    host = InputBox(&quot;Enter host address&quot;,&quot;CLASS for pingStatus&quot;, host)
    If Len(host)=0 Then Exit Do
    ku host
    
Loop
WScript.Quit




Function ku(pHost)
    set testHost=new class_pingWMI

    ret = testHost.ping_resolv( pHost )
    
    &#039; повторный старт, если результат=off
    &#039; If ret=&quot;off&quot; then ret = testHost.ping_resolv( pHost )

    &#039; выводим свойства результата
    msgbox _
        &quot;testHost.testAddress : &quot; &amp; vbTab &amp; testHost.testAddress &amp; vbCrLf &amp; vbCrLf &amp;_
        &quot;testHost.descPing : &quot; &amp; vbTab &amp; testHost.descPing &amp; vbCrLf &amp;_
        &quot;FUNCTION _result_   : &quot; &amp; vbTab &amp; ret &amp; vbCrLf &amp; vbCrLf &amp;_
        &quot;testHost.status : &quot; &amp; vbTab &amp; testHost.status &amp; vbCrLf &amp;_
        &quot;testHost.ipAddr : &quot; &amp; vbTab &amp; testHost.ipAddr &amp; vbCrLf &amp;_
        &quot;testHost.ipAddrResolved : &quot; &amp; vbTab &amp; testHost.ipAddrResolved &amp; vbCrLf &amp;_
        &quot;testHost.addrResolv_woDomain : &quot; &amp; vbTab &amp; testHost.addrResolv_woDomain &amp; vbCrLf &amp;_
        &quot;testHost.Timeout : &quot; &amp; vbTab &amp; testHost.Timeout &amp; vbCrLf &amp;_
        &quot;testHost.ResponseTime : &quot; &amp; vbTab &amp; testHost.ResponseTime &amp; vbCrLf &amp;_
        &quot;testHost.descResolv : &quot; &amp; vbTab &amp; testHost.descResolv &amp; vbCrLf &amp;_
        &quot;testHost.chkResolve : &quot; &amp; vbTab &amp; testHost.chkResolve &amp; vbCrLf &amp;_
        vbCrLf, , &quot;class_pingWMI&quot;

    set testHost = Nothing

End FUNCTION

&#039; --- Класс для получения набора свойств по результу опроса хоста через Win32_PingStatus
&#039; Передаваемый параметр:
&#039;   (str) testAddress - указываемый перед запуском функции &quot;ping_resolv&quot; (либо в ее параметре) адрес хоста (имя/айпи)
&#039; 
&#039; Дополнительно настраиваемое свойство:
&#039;   (int) Timeout - таймаут пинга, по умолчанию - 1500 мс
&#039; 
&#039; Устанавливаемые свойства:
&#039;   (str) result - тоже, что и сам результат функции (on/off)
&#039;   (int) status - 0 (если ответ пинга успешен), либо равен коду статуса пинга (либо =-1, если код статуса был NULL)
&#039;   (str) ipAddr - (свойство пинга ProtocolAddress) - по идее - айпи адрес, может быть - либо ipV4 (возможен и префикс), либо ipV6
&#039;   (str) ipAddrResolved - (свойство пинга ProtocolAddressResolved) теоретически - отрезолвленное полное имя хооста (с доменом),
&#039;                    но пингом может быть возвращен и айпи.
&#039;   (str) addrResolv_woDomain - только отрезолвленое имя - это свойство ipAddrResolved с отсеченным от имени доменом, 
&#039;                    и дополнительно - если в ProtocolAddressResolved был получен айпи вместо имени, то возвращается - &quot;&quot;.
&#039;   (int) chkResolve - результат сравнения имени тестируемого хоста с отрезолвленым именем_без_домена.
&#039;                    0 - имена совпадают / 1 - не свопадают / -1 - сравнение некорректно, т.к. резолв имени не осуществлен.
&#039;   (int) ResponseTime - xxx ms (свойство пинга ResponseTime) - по идее - число, соответствуещее количеству милисекунд, 
&#039;                    прошедших в ожидании ответа от хоста. Если ответ не получен вообще будет равен -1.
&#039;   (str) descPing - текстовое описание пинг-свойства &quot;StatusCode&quot;.
&#039;   (str) descResolv - текстовое описание пинг-свойства &quot;PrimaryAddressResolutionStatus&quot;.
&#039;
&#039; Результат функции &quot;ping_resolv&quot; (str): &quot;on&quot; - ответ получен / &quot;off&quot; - не получен&#039;
&#039;
&#039; Использование:
&#039; Dim pHost : pHost = &quot;compPupkinV&quot; - тестируемый компьютер
&#039; Dim sHost_Name, sHost_ip, ret
&#039; Dim myVar
&#039; Set myVar = NEW Class_pingWMI           &#039;// объявляем объектную переменную
&#039; &#039;&#039;&#039;myVar.Timeout = 2000                 &#039;// меняем таймаут пинга&#039;
&#039; ret = myVar.ping_resolv( pHost )        &#039;// запускаем пинг, свойства объекта заполняются, &quot;ret&quot; будет равно on/off
&#039; sHost_Name = myVar.addrResolv_woDomain  &#039;// обращаемся к свойствам объекта
&#039; sHost_ip = myVar.ipAddr                 &#039;// обращаемся к свойствам объекта
&#039; Set myVar = Nothing                     &#039;// удаляем объектную переменную
CLASS Class_pingWMI
    Dim testAddress, result, ipAddr, ipAddrResolved, addrResolv_woDomain, chkResolve
    Dim ResponseTime, status, descPing, descResolv, Timeout
    Function ping_resolv( paramAddress )
        testAddress = paramAddress
        &#039; Устанавливаем таймаут на дефоултный, если &quot;Timeout&quot; не содержит число от 1000&#039;
        &#039; Dim defaultTimeout
        &#039; defaultTimeout = 1500
        &#039; If Not IsNull (Timeout) Then
            &#039; If Timeout=&gt;1000 Then defaultTimeout = Timeout
        &#039; End IF
        Dim objPing 
        Set objPing = _
            GetObject(&quot;winmgmts:{impersonationLevel=impersonate}&quot;).ExecQuery( _
            &quot;select * from Win32_PingStatus where address = &#039;&quot; &amp; testAddress &amp; &quot;&#039;&quot; &amp;_
            &quot; AND ResolveAddressNames=&#039;true&#039;&quot; &amp;_
            &quot;&quot;) 
                
            &#039; &quot; AND TypeofService=16 &quot; &amp;_
            &#039; &quot; AND Timeout=&quot; &amp; CStr(defaultTimeout) &amp;_
            
        &#039; --- Значения по-умолчанию&#039;
        result = &quot;&quot;
        ipAddr = &quot;&quot;
        ipAddrResolved = &quot;&quot;
        addrResolv_woDomain = &quot;&quot;
        chkResolve = -1
        ResponseTime = -1
        status = -1
        descPing = &quot;&quot;
        descResolv = &quot;&quot;
        
        For Each objStatus in objPing 
            With objStatus
            
                Timeout = .Timeout
                &#039; --- Ping command status codes.
                If IsNull(.StatusCode) or .StatusCode &lt;&gt; 0 Then 
                    result = &quot;off&quot; 
                Else
                    result = &quot;on&quot; 
                    &#039; --- Time elapsed to handle the request.
                    ResponseTime = .ResponseTime
                End If
                &#039; для &quot;нормального&quot; (числового) StatusCode формируем текст.описание
                If NOT IsNull(.StatusCode) Then
                    status = .StatusCode
                    descPing = GetStatusCode( status )
                Else 
                    status = -1 &#039; тоже - unknown&#039;
                End IF
                
                
                &#039; --- Status of the address resolution process. If successful, the value is 0 (zero). 
                &#039; Any other value indicates an unsuccessful address resolution.
                descResolv = GetStatusCode( .PrimaryAddressResolutionStatus ) 
                
                &#039; --- Resolved address corresponding to the ProtocolAddress property. The default is &quot;&quot;.
                ipAddrResolved = .ProtocolAddressResolved
                
                &#039;--- отсекаем имя домена у отрезолвленного адреса&#039;
                addrResolv_woDomain = &quot;&quot;
                If Len(ipAddrResolved)&gt;0 Then
                    &#039; имеем непустое значение&#039;
                    If Asc(Left(ipAddrResolved,1))&gt;57 Then
                        &#039; значение не начинается с цифры, т.е. - не айпи&#039;
                        IF InStr(ipAddrResolved,&quot;.&quot;)&gt;0 Then
                            &#039;... и содержит имя домена - убираем в имени все правее первой точки&#039;
                            addrResolv_woDomain = Left(ipAddrResolved, InStr(ipAddrResolved,&quot;.&quot;) - 1 )
                        End IF
                        If Asc(Left(testAddress,1))&gt;57 Then
                            &#039; Тестируемый хост был задан также именем, а не айпи.
                            &#039; Сравниваем имена (тестируемое с полученным), если отличий нет - устанавливаем переменную &quot;chkResolve&quot; в 0, 
                            &#039;   иначе - в 1.
                            If UCase(testAddress) = UCase(addrResolv_woDomain) Then
                                chkResolve = 0
                            Else
                                chkResolve = 1
                            End IF
                        Else
                            &#039; тестируемый хост был указан айпи-адресом, его сравнение с полученым адресом не выполняем&#039;
                        End IF
                    End IF
                End IF
                
                &#039; --- Address that the destination used to reply. The default is &quot;&quot;.
                &#039; если получен IP-адрес с префиксом пробуем оставить один ip4-адрес&#039;
                ipAddr = .ProtocolAddress
                If InStr(ipAddr,&quot;:&quot;)&gt;0 And InStr(ipAddr,&quot;.&quot;)&gt;0 Then 
                    ipAddr = Right( ipAddr, Len(ipAddr) - InStrRev(ipAddr,&quot;:&quot;) )
                End IF
                
            End With
        Next 
        Set objPing = Nothing
        
        ping_resolv = result
    End FUNCTION
    
    Function GetStatusCode (pIntCode)
        &#039; from http://msdn.microsoft.com/en-us/library/windows/desktop/aa394350(v=vs.85).aspx
        Select Case pIntCode
            Case 0 : GetStatusCode = &quot;Success&quot;
            Case 11001 : GetStatusCode = &quot;Buffer Too Small&quot;
            Case 11002 : GetStatusCode = &quot;Destination Net Unreachable&quot;
            Case 11003 : GetStatusCode = &quot;Destination Host Unreachable&quot;
            Case 11004 : GetStatusCode = &quot;Destination Protocol Unreachable&quot;
            Case 11005 : GetStatusCode = &quot;Destination Port Unreachable&quot;
            Case 11006 : GetStatusCode = &quot;No Resources&quot;
            Case 11007 : GetStatusCode = &quot;Bad Option&quot;
            Case 11008 : GetStatusCode = &quot;Hardware Error&quot;
            Case 11009 : GetStatusCode = &quot;Packet Too Big&quot;
            Case 11010 : GetStatusCode = &quot;Request Timed Out&quot;
            Case 11011 : GetStatusCode = &quot;Bad Request&quot;
            Case 11012 : GetStatusCode = &quot;Bad Route&quot;
            Case 11013 : GetStatusCode = &quot;TimeToLive Expired Transit&quot;
            Case 11014 : GetStatusCode = &quot;TimeToLive Expired Reassembly&quot;
            Case 11015 : GetStatusCode = &quot;Parameter Problem&quot;
            Case 11016 : GetStatusCode = &quot;Source Quench&quot;
            Case 11017 : GetStatusCode = &quot;Option Too Big&quot;
            Case 11018 : GetStatusCode = &quot;Bad Destination&quot;
            Case 11032 : GetStatusCode = &quot;Negotiating IPSEC&quot;
            Case 11050 : GetStatusCode = &quot;General Failure&quot;
            Case Else
                GetStatusCode = &quot;_unknown_&quot;
        End Select
    
    End FUNCTION
    
End CLASS



</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rom5)]]></author>
			<pubDate>Thu, 06 Jun 2013 12:34:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72797#p72797</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: класс для пинга для получения нескольких свойств]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72789#p72789</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>пока на своей рабочей Вин7 в тестах не вывел сие значение и удивился, что там 4000.</p></blockquote></div><p>Покажите, какой код использовали, попробуем.</p><div class="quotebox"><blockquote><p>т.е. для меня последовательность пинга имеет значение,</p></blockquote></div><p>В указанном примере последовательность значения не имеет, поскольку (первый пример без очереди опроса) очень слабо зависит от количества машин и, практически, почти не превышает времени опроса одной отключённой машины, поскольку запросы делаются асинхронно. Т.е., если у Вас пять машин в списке и из них две отключённых — их опрос займёт больше времени, нежели способом, указанным по ссылке.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 06 Jun 2013 09:59:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72789#p72789</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: класс для пинга для получения нескольких свойств]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72784#p72784</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><div class="quotebox"><blockquote><p>по умолчанию я его уже занизил с 4000мс до 1500мс</p></blockquote></div><p>Разве таймаут не 1000?</p></blockquote></div><p>Я и не думал таймаут менять, пока на своей рабочей Вин7 в тестах не вывел сие значение и удивился, что там 4000. </p><p>Поменял, поганял тесты двумя вариантами приложения на подразделении со слабым каналом - количество неответивших машин не менялось, а скорость работы (в тестируемом списке - весомое количество просто отключенных машин) ощутимо выросла.</p><br /><br /><div class="quotebox"><blockquote><p>Для ускорения опроса группы машин изумительно подходит: VBScript: асинхронная обработка множественных запросов WMI...</p></blockquote></div><p>Именно в том моем hta-приложении мне асинхронный пинг не особо и нужен, т.к. пинги осуществляются с целью поиска залогиненного пользователя среди довольно ограниченного списка его машин.</p><p>А список тот специальным образом выстраивается, чтобы проверка шла сначала среди машин его юнита причем в первую очередь на тех, где он он был в последних пользователях (по запросу к MS SCCM) и где он указан менеджером (запросы к AD) - <strong>т.е. для меня последовательность пинга имеет значение</strong>, на искомую машину попадаю довольно оперативно.</p><p>ps. Хотя надо поизучать устройство &quot;LANAdmin.hta (c) mozers&quot; - если юзер вообще нигде не залогинен, а машин разрешенных много, то обработку программа завершит, согласен, что ранее.</p>]]></description>
			<author><![CDATA[null@example.com (Rom5)]]></author>
			<pubDate>Thu, 06 Jun 2013 09:20:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72784#p72784</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: класс для пинга для получения нескольких свойств]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72778#p72778</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>по умолчанию я его уже занизил с 4000мс до 1500мс</p></blockquote></div><p>Разве таймаут не 1000?<br /></p><div class="quotebox"><blockquote><p>Timeout</p><p>&nbsp; &nbsp; Data type: uint32<br />&nbsp; &nbsp; Access type: Read-only<br />&nbsp; &nbsp; Qualifiers: Key</p><p>&nbsp; &nbsp; Time-out value in milliseconds. If a response is not received in this time, no response is assumed. <span style="color: red">The default is 1000 milliseconds.</span></p></blockquote></div><p>Для ускорения опроса <em>группы</em> машин изумительно подходит: <a href="http://forum.script-coding.com/viewtopic.php?id=3783">VBScript: асинхронная обработка множественных запросов WMI (Страница 1) — Windows Script Host, HTA (VBScript, JScript) — Серый форум</a>.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 06 Jun 2013 08:13:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72778#p72778</guid>
		</item>
		<item>
			<title><![CDATA[VBS: класс для пинга для получения нескольких свойств]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72777#p72777</link>
			<description><![CDATA[<p>Захотел, чтобы своя функция пингования возвращала не только айпи-адрес полученый при успешном пинге, но еще и резолв имени, время ответа, описание причины неуспешности прохождения пинга.</p><p>Решил попробовать создать свой <span class="bbu">класс для пингования машин</span>, функция пинга вернет всего один результат - &quot;on&quot; или &quot;off&quot;, но зато и установит переменные класса в интересуемые полученные пингом свойства. </p><p>Перед стартом пинга <span class="bbu">можно изменить время таймаута</span>, по умолчанию я его уже занизил с 4000мс до 1500мс - последовательный тест списка машин из юнита, в котором предостаточно невключенных машин, ускорился ~40%.</p><p>Вот, код с комментариями, буду рад претензиям, т.к. за написание класса взялся впервые:<br /></p><div class="codebox"><pre><code>
&#039; --- Класс для получения набора свойств по результу опроса хоста через Win32_PingStatus
&#039; Передаваемый параметр:
&#039;   (str) testAddress - указываемый перед запуском функции &quot;ping_resolv&quot; (либо в ее параметре) адрес хоста (имя/айпи)
&#039; 
&#039; Дополнительно настраиваемое свойство:
&#039;   (int) Timeout - таймаут пинга, по умолчанию - 1500 мс
&#039; 
&#039; Устанавливаемые свойства:
&#039;   (str) result - тоже, что и сам результат функции (on/off)
&#039;   (int) status - 0 (если ответ пинга успешен), либо равен коду статуса пинга (либо =-1, если код статуса был NULL)
&#039;   (str) ipAddr - (свойство пинга ProtocolAddress) - по идее - айпи адрес, может быть - либо ipV4 (возможен и префикс), либо ipV6
&#039;   (str) ipAddrResolved - (свойство пинга ProtocolAddressResolved) теоретически - отрезолвленное полное имя хооста (с доменом),
&#039;                    но пингом может быть возвращен и айпи.
&#039;   (str) addrResolv_woDomain - только отрезолвленое имя - это свойство ipAddrResolved с отсеченным от имени доменом, 
&#039;                    и дополнительно - если в ProtocolAddressResolved был получен айпи вместо имени, то возвращается - &quot;&quot;.
&#039;   (int) chkResolve - результат сравнения имени тестируемого хоста с отрезолвленым именем_без_домена.
&#039;                    0 - имена совпадают / 1 - не свопадают / -1 - сравнение некорректно, т.к. резолв имени не осуществлен.
&#039;   (int) ResponseTime - xxx ms (свойство пинга ResponseTime) - по идее - число, соответствуещее количеству милисекунд, 
&#039;                    прошедших в ожидании ответа от хоста. Если ответ не получен вообще будет равен -1.
&#039;   (str) descPing - текстовое описание пинг-свойства &quot;StatusCode&quot;.
&#039;   (str) descResolv - текстовое описание пинг-свойства &quot;PrimaryAddressResolutionStatus&quot;.
&#039;
&#039; Результат функции &quot;ping_resolv&quot; (str): &quot;on&quot; - ответ получен / &quot;off&quot; - не получен&#039;
&#039;
&#039; Использование:
&#039; Dim pHost : pHost = &quot;compPupkinV&quot; - тестируемый компьютер
&#039; Dim sHost_Name, sHost_ip, ret
&#039; Dim myVar
&#039; Set myVar = NEW Class_pingWMI           &#039;// объявляем объектную переменную
&#039; &#039;&#039;&#039;myVar.Timeout = 2000                 &#039;// меняем таймаут пинга&#039;
&#039; ret = myVar.ping_resolv( pHost )        &#039;// запускаем пинг, свойства объекта заполняются, &quot;ret&quot; будет равно on/off
&#039; sHost_Name = myVar.addrResolv_woDomain  &#039;// обращаемся к свойствам объекта
&#039; sHost_ip = myVar.ipAddr                 &#039;// обращаемся к свойствам объекта
&#039; Set myVar = Nothing                     &#039;// удаляем объектную переменную
CLASS Class_pingWMI
    Dim testAddress, result, ipAddr, ipAddrResolved, addrResolv_woDomain, chkResolve
    Dim ResponseTime, status, descPing, descResolv, Timeout
    Function ping_resolv( paramAddress )
        testAddress = paramAddress
        &#039; Устанавливаем таймаут на дефоултный, если &quot;Timeout&quot; не содержит число от 1000&#039;
        Dim defaultTimeout
        defaultTimeout = 1500
        If Not IsNull (Timeout) Then
            If Timeout=&gt;1000 Then defaultTimeout = Timeout
        End IF
        Dim objPing 
        Set objPing = _
            GetObject(&quot;winmgmts:{impersonationLevel=impersonate}&quot;).ExecQuery( _
            &quot;select * from Win32_PingStatus where address = &#039;&quot; &amp; testAddress &amp; &quot;&#039;&quot; &amp;_
            &quot; AND ResolveAddressNames=&#039;true&#039;&quot; &amp;_
            &quot; AND Timeout=&quot; &amp; CStr(defaultTimeout) &amp;_
            &quot; AND TypeofService=16 &quot; &amp;_
            &quot;&quot;) 
        &#039; --- Значения по-умолчанию&#039;
        result = &quot;&quot;
        ipAddr = &quot;&quot;
        ipAddrResolved = &quot;&quot;
        addrResolv_woDomain = &quot;&quot;
        chkResolve = -1
        ResponseTime = -1
        status = -1
        descPing = &quot;&quot;
        descResolv = &quot;&quot;
        
        For Each objStatus in objPing 
            With objStatus
            
                Timeout = .Timeout
                &#039; --- Ping command status codes.
                If IsNull(.StatusCode) or .StatusCode &lt;&gt; 0 Then 
                    result = &quot;off&quot; 
                Else
                    result = &quot;on&quot; 
                    &#039; --- Time elapsed to handle the request.
                    ResponseTime = .ResponseTime
                End If
                &#039; для &quot;нормального&quot; (числового) StatusCode формируем текст.описание
                If NOT IsNull(.StatusCode) Then
                    status = .StatusCode
                    descPing = GetStatusCode( status )
                Else 
                    status = -1 &#039; тоже - unknown&#039;
                End IF
                
                
                &#039; --- Status of the address resolution process. If successful, the value is 0 (zero). 
                &#039; Any other value indicates an unsuccessful address resolution.
                descResolv = GetStatusCode( .PrimaryAddressResolutionStatus ) 
                
                &#039; --- Resolved address corresponding to the ProtocolAddress property. The default is &quot;&quot;.
                ipAddrResolved = .ProtocolAddressResolved
                
                &#039;--- отсекаем имя домена у отрезолвленного адреса&#039;
                addrResolv_woDomain = &quot;&quot;
                If Len(ipAddrResolved)&gt;0 Then
                    &#039; имеем непустое значение&#039;
                    If Asc(Left(ipAddrResolved,1))&gt;57 Then
                        &#039; значение не начинается с цифры, т.е. - не айпи&#039;
                        IF InStr(ipAddrResolved,&quot;.&quot;)&gt;0 Then
                            &#039;... и содержит имя домена - убираем в имени все правее первой точки&#039;
                            addrResolv_woDomain = Left(ipAddrResolved, InStr(ipAddrResolved,&quot;.&quot;) - 1 )
                        End IF
                        If Asc(Left(testAddress,1))&gt;57 Then
                            &#039; Тестируемый хост был задан также именем, а не айпи.
                            &#039; Сравниваем имена (тестируемое с полученным), если отличий нет - устанавливаем переменную &quot;chkResolve&quot; в 0, 
                            &#039;   иначе - в 1.
                            If UCase(testAddress) = UCase(addrResolv_woDomain) Then
                                chkResolve = 0
                            Else
                                chkResolve = 1
                            End IF
                        Else
                            &#039; тестируемый хост был указан айпи-адресом, его сравнение с полученым адресом не выполняем&#039;
                        End IF
                    End IF
                End IF
                
                &#039; --- Address that the destination used to reply. The default is &quot;&quot;.
                &#039; если получен IP-адрес с префиксом пробуем оставить один ip4-адрес&#039;
                ipAddr = .ProtocolAddress
                If InStr(ipAddr,&quot;:&quot;)&gt;0 And InStr(ipAddr,&quot;.&quot;)&gt;0 Then 
                    ipAddr = Right( ipAddr, Len(ipAddr) - InStrRev(ipAddr,&quot;:&quot;) )
                End IF
                
            End With
        Next 
        Set objPing = Nothing
        
        ping_resolv = result
    End FUNCTION
    
    Function GetStatusCode (pIntCode)
        &#039; from http://msdn.microsoft.com/en-us/library/windows/desktop/aa394350(v=vs.85).aspx
        Select Case pIntCode
            Case 0 : GetStatusCode = &quot;Success&quot;
            Case 11001 : GetStatusCode = &quot;Buffer Too Small&quot;
            Case 11002 : GetStatusCode = &quot;Destination Net Unreachable&quot;
            Case 11003 : GetStatusCode = &quot;Destination Host Unreachable&quot;
            Case 11004 : GetStatusCode = &quot;Destination Protocol Unreachable&quot;
            Case 11005 : GetStatusCode = &quot;Destination Port Unreachable&quot;
            Case 11006 : GetStatusCode = &quot;No Resources&quot;
            Case 11007 : GetStatusCode = &quot;Bad Option&quot;
            Case 11008 : GetStatusCode = &quot;Hardware Error&quot;
            Case 11009 : GetStatusCode = &quot;Packet Too Big&quot;
            Case 11010 : GetStatusCode = &quot;Request Timed Out&quot;
            Case 11011 : GetStatusCode = &quot;Bad Request&quot;
            Case 11012 : GetStatusCode = &quot;Bad Route&quot;
            Case 11013 : GetStatusCode = &quot;TimeToLive Expired Transit&quot;
            Case 11014 : GetStatusCode = &quot;TimeToLive Expired Reassembly&quot;
            Case 11015 : GetStatusCode = &quot;Parameter Problem&quot;
            Case 11016 : GetStatusCode = &quot;Source Quench&quot;
            Case 11017 : GetStatusCode = &quot;Option Too Big&quot;
            Case 11018 : GetStatusCode = &quot;Bad Destination&quot;
            Case 11032 : GetStatusCode = &quot;Negotiating IPSEC&quot;
            Case 11050 : GetStatusCode = &quot;General Failure&quot;
            Case Else
                GetStatusCode = &quot;_unknown_&quot;
        End Select
    
    End FUNCTION
    
End CLASS

</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rom5)]]></author>
			<pubDate>Thu, 06 Jun 2013 07:49:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72777#p72777</guid>
		</item>
	</channel>
</rss>
