Всем привет.
Значит наличие машины в сети можно вычислить пингом(к примеру)
// check.js
var arrMachines = new Array("somemachine1.ru", "somemachine2.ru");
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")
var objSWbemObject = objWMIService.Get("Win32_Process")
var WshShell = WScript.CreateObject("WScript.Shell")
for(var i = 0; i< arrMachines.length; i++)
{
var machine = arrMachines[i];
var objPing = GetObject("winmgmts:{impersonationLevel=impersonate}");
objPing = objPing.ExecQuery("select * from Win32_PingStatus where address = '" + machine + "'");
for(var _enum = new Enumerator(objPing);!_enum.atEnd();_enum.moveNext()){
var objStatus=_enum.item();
//WScript.Echo("Pinging status is " + objStatus.StatusCode)
if(objStatus.StatusCode == null || objStatus.StatusCode != 0)
{
WScript.Echo("Computer " + machine + " is unreachable");
}
if(objStatus.StatusCode == 0)
{
WScript.Echo("Computer " + machine + " is o'key reachable");
}
}
}
Возникла острая необходимость убедиться в доступности(открыт) конкретного порта, типа как это делают сканеры.
Но очень желательно скриптом или используя встроеные команды windows.
Очень надеюсь.
Здравствуйте, Аноним, Вы писали:
Вобщем вот:
main();
function CheckHostInNetwork(sHost)
{
this.socket = WScript.CreateObject("MSWinsock.Winsock", "CheckHostInNetwork_Event_");
this.socket.Protocol = 0; // TCP
this.socket.RemoteHost = sHost;
this.socket.RemotePort = 139; // default - netbios-ssn
this.sckClosed = 0;
this.Check = function(timeout)
{
if (timeout == undefined) // set default timeout
timeout = 3000;
// cleanup
CheckHostInNetwork.success = false;
CheckHostInNetwork.errorCode = 0;
if (this.socket.State != this.sckClosed)
this.socket.Close();
// try connect...
this.socket.Connect();
timeout *= 10;
while(!CheckHostInNetwork.success && !CheckHostInNetwork.errorCode && timeout > 0)
{
WScript.Sleep(100);
timeout -= 100;
}
return (CheckHostInNetwork.success && !CheckHostInNetwork.errorCode);
}
}
function CheckHostInNetwork_Event_Error(Number, Description, Scode)
{
CheckHostInNetwork.errorCode = Number;
}
function CheckHostInNetwork_Event_Connect()
{
CheckHostInNetwork.success = true;
}
function CheckHostInNetwork_Event_Close()
{
}
function main()
{
var host = "somehost or IP";
var chk = new CheckHostInNetwork(host);
chk.socket.RemoteHost = 1295;
WScript.Echo("host: " + host + " = " + (chk.Check(1000) ? "present" : "not present"));
chk.socket.Close();
WScript.Quit(0);
}
Только для работы нужен зарегестрированый mswinsck.ocx на машине.
Конечно было бы интересно средствами WMI, но чето никак, может кто знает как?