<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: Как пинговал лет десять назад, будучи сисадмином, некоторые приёмы]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=18179</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=18179&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: Как пинговал лет десять назад, будучи сисадмином, некоторые приёмы».]]></description>
		<lastBuildDate>Wed, 01 May 2024 07:27:13 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[JS: Как пинговал лет десять назад, будучи сисадмином, некоторые приёмы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=160859#p160859</link>
			<description><![CDATA[<p>Я тогда пинговал несколько хостов, чтобы отслеживать проблемы со связью. Написал скриптик:<br /></p><div class="codebox"><pre><code>
var SleepTime=30;
var S=WScript.CreateObject(&quot;WScript.Shell&quot;),fso=new ActiveXObject(&quot;Scripting.FileSystemObject&quot;),Args=WScript.Arguments,Adr,IP,wmi,i,e,s,PrevS=0,msg;
if(Args.Length!=1)WScript.Quit(-1);Adr=Args.item(0);
if(fso.GetFileName(WScript.FullName).toLowerCase()==&quot;wscript.exe&quot;)S.Run(&quot;cmd /k cscript &quot;+WScript.ScriptName+&quot; &quot;+Adr,1)
else{	S=null;fso=null;wmi=GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2&quot;);
	while(true){e=new Enumerator(wmi.ExecQuery(&quot;Select StatusCode,ResponseTime&quot;+(IP?&quot;&quot;:&quot;,ProtocolAddress&quot;)+
		&quot; from Win32_PingStatus where Address = &#039;&quot;+(IP?IP:Adr)+&quot;&#039;&quot;));
		for(;!e.atEnd();e.moveNext())if((s=(i=e.item()).StatusCode)==0||s!=PrevS){PrevS=s;switch(s){
			case  null:msg=&quot;для &#039;&quot;+Adr+&quot;&#039; невозможно получить ip адрес.&quot;;break;
			case     0:if(!IP)IP=i.ProtocolAddress;msg=(IP?IP:Adr)+&quot; =&quot;+i.ResponseTime+&quot; мс.&quot;;break;
			case 11002:msg=&quot;Заданная сеть недоступна.&quot;;IP=0;break;
			case 11003:msg=&quot;Хост недоступен.&quot;;IP=0;break;
			case 11010:msg=&quot;Превышен интервал ожидания.&quot;;IP=0;break;
			default:IP=0;msg=&quot;Ошибка &quot;+s;
			}WScript.echo(new Date().toLocaleTimeString()+&quot;: &quot;+msg)
		}
		for(i=SleepTime;i;i--)with(WScript)with(StdOut){Write(s=new Date().toLocaleTimeString()+&quot;: &quot;+i);Sleep(1000);Write(&quot;\b\b  \r&quot;)}
	}
}</code></pre></div><p>Он пингует раз в 30 секунд примерно, показывает сколько секунд осталось до следующего пинга, фиксирует время, когда пинги выполнялись и результат показывает в отдельном окне. Причём, если результат не изменился, не дублирует на экране. Вот на днях немного доработал: свой роутер с ddns для подключения по OpenVPN с применением сертификата на белый динамический IP. Так вот, пингует по DNS адресу хоста первый раз. Из протокола ICMP достаёт IP и дальше пингует по нему. До первого сбоя. Потом снова пытается получить IP по DNS в рамках ICMP только. У меня роутер для безопасности и стабильности раз в сутки перезагружается. Посмотрел - всё работает как надо. Конечно, js (WSH) подзабыл порядком, но правки &quot;по памяти&quot; внёс, вроде, верные <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Сначала у себя на Дзене опубликовал.</p>]]></description>
			<author><![CDATA[null@example.com (kvk-2019)]]></author>
			<pubDate>Wed, 01 May 2024 07:27:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=160859#p160859</guid>
		</item>
	</channel>
</rss>
