<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS: Как пинговал лет десять назад, будучи сисадмином, некоторые приёмы]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18179&amp;type=atom" />
	<updated>2024-05-01T07:27:13Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=18179</id>
		<entry>
			<title type="html"><![CDATA[JS: Как пинговал лет десять назад, будучи сисадмином, некоторые приёмы]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=160859#p160859" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kvk-2019]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=40485</uri>
			</author>
			<updated>2024-05-01T07:27:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=160859#p160859</id>
		</entry>
</feed>
