Определить открыт конкреный порт.
От: Аноним  
Дата: 11.10.05 19:35
Оценка:
Всем привет.

Значит наличие машины в сети можно вычислить пингом(к примеру)

// 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.
Очень надеюсь.
Re: Определить открыт конкреный порт.
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 11.10.05 22:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всем привет.


А>Значит наличие машины в сети можно вычислить пингом(к примеру)


А>Возникла острая необходимость убедиться в доступности(открыт) конкретного порта, типа как это делают сканеры.


А>Но очень желательно скриптом или используя встроеные команды windows.

А>Очень надеюсь.

ping не очень надежный способ (зависит от политики безопасеостт удаженного хоста), ну да бог с ним

Для TCP портов: простейший вариант — попробовать законнкетиться.
Также можно посылать SYN пакет и ждать ACK если порт открыт
Можно слать FIN и ждать RST.
Для UDP: Тут нет надежного способа. Можно заслать UDP пакет и ждать ICMP_PORT_UNREACH, если порт не открыт (лучше слать несколько раз, хотя все равно нет 100 проц гарантии) или анализировать что вернет send.

Можешь посмотреть как это сделано в Nmap.
-- Андрей
Re[2]: Определить открыт конкреный порт.
От: Аноним  
Дата: 12.10.05 01:03
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>ping не очень надежный способ (зависит от политики безопасеостт удаженного хоста), ну да бог с ним

А как лучше? ping понимаю по ICMP дышит.
Re[3]: Определить открыт конкреный порт.
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 12.10.05 07:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Андрей Коростелев, Вы писали:


АК>>ping не очень надежный способ (зависит от политики безопасеостт удаженного хоста), ну да бог с ним

А>А как лучше? ping понимаю по ICMP дышит.
Для безпортового скана — только ICMP ping
-- Андрей
Re: Определить открыт конкреный порт.
От: Аноним  
Дата: 12.10.05 20:37
Оценка:
Здравствуйте, Аноним, Вы писали:

Вобщем вот:



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, но чето никак, может кто знает как?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.