comprobar que un host responde a varios puertos

Comprueba y registra el estado de puertos en un host remoto. Útil para detectar cortes si tenemos ofuscadas partes de la red.
 
#region intro
# nombre     : Comprobar-Puertos.ps1
# descripción: comprueba que un host responde a varios puertos
# fecha creac: 11/07/2011
# versión    : 0.2(15/07/2013)
# autor      : Jorge Mestre
# Changelog  : 11/07/2011 - creado
# Changelog  : 15/07/2013 - Agregado param $infinito
#keywords    : puertos,comprobar,telnet
#endregion intro


param($puertos,$dst,[switch]$infinito,$tamLog)

if (
 ((-not $puertos) -or (-not $dst)) -or `
 (($infinito) -and (-not $tamLog)))
{
  Write-Host "faltan argumentos`nEj: .\comprobar-puertos.ps1 -dst `"server`" `
  -puertos 80,81,9000 [-infinito -tamLog MB]" -ForegroundColor Yellow
  exit
}
#region MODIFICAR
$ArchLog = ".\LogPuertos.log"
$LimTamArchLog = $tamLog # MBs
$intervalo = 5 # segundos
#EndRegion MODIFICAR

#Region Funciones
function RevisarTamLog($ArchLog)
{
 $tamArch = ((Get-Item $ArchLog).length)/1mb | Out-Null
 if ($TamArch -gt $LimTamArchLog)
 {
  rm $ArchLog
 }
}

function eLog($texto)
{
 $fecha = get-date -F "dd/MM/yyyy - hh:mm:ss"
 $txt = "$fecha`: puerto $puerto en $dst $texto"
 Write-Host $txt
 $txt | Out-File -Encoding utf8 -delimiter ';' -Append $ArchLog
}

function comprobarPuertos
{
 RevisarTamLog $ArchLog
 foreach ($puerto in $puertos)
 {
  try
  {
   $socket = new-object Net.Sockets.TcpClient
   $socket.Connect($dst, $puerto)
   $socket.Close()
   eLog "abierto"
  }
  catch
  {
   eLog "cerrado"
  }
  $socket = $null
 }
}
#EndRegion Funciones

#Region principal
if (-not $infinito)
{
 comprobarPuertos
}
else
{
 while (1 -eq 1)
 {
  comprobarPuertos
  sleep $intervalo  
 }
}
#EndRegion principal

No hay comentarios.: