Con Powershell (y su acceso a las librerias de .NET Framework) llegó el momento de jubilar telnet (si solo lo usas para chequear los puertos abiertos de un equipo).
Con el siguiente script se puede revisar puertos abiertos de una maquina (o una lista de maquinas 'computers.txt' si dejas el campo vacío) y comprobar una colección de puertos (de la lista ya definida) o especificar manualmente los puertos separados por comas.
Al terminar guardará los resultados en un log.
$socket=New-Object system.net.Sockets.TcpClient
Con el siguiente script se puede revisar puertos abiertos de una maquina (o una lista de maquinas 'computers.txt' si dejas el campo vacío) y comprobar una colección de puertos (de la lista ya definida) o especificar manualmente los puertos separados por comas.
Al terminar guardará los resultados en un log.
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$coleccion=@{
 TS=3389
    vCenter=9443
    IIS=80,443
    AD=53,88,135,137,139,389,445,593,636,3268,3269,5722
 DHCP=67,2535
    }
$maquinas=read-host "computers?"
 if ($maquinas -eq "")
 {
 $maquinas=get-content "$scriptPath\computers.txt"|?{$_}
 write-host "Loading computers from computers.txt" -fore cyan
 $maquinas
 }
$coleccion
$choice=read-host "`nPorts to scan?"
 try
 {
 [int]$choice|out-null
 $puertos=$choice -split ","
 }
 Catch{$puertos=$coleccion.$choice}
#create an object to gather all the results and add them to a logfile at the end
$objects=@()
foreach($maquina in $maquinas){
$object=New-Object PSObject
$object|Add-Member -MemberType NoteProperty -Name maquina -Value $maquina.TOUPPER()
write-host "$($maquina.TOUPPER())`t" -nonewline
 foreach ($puerto in $puertos)
 { 
 $socket=New-Object system.net.Sockets.TcpClient
 $connect = $socket.BeginConnect($maquina,$puerto,$null,$null)
 #Configure a timeout before quitting - time in milliseconds 
 $wait = $connect.AsyncWaitHandle.WaitOne(2000,$false) 
  If (-Not $Wait)
  {
  #timeout
  Write-Host "$puerto " -ForegroundColor darkgray -nonewline
  $object|Add-Member -MemberType NoteProperty -Name $puerto -Value "timeout"
  } 
  Else
  {
   try
   {
   $socket.EndConnect($connect)
   #open
   write-Host "$puerto " -ForegroundColor Green -nonewline
   $object|Add-Member -MemberType NoteProperty -Name $puerto -Value "open"
   }
   Catch [system.exception]{
   #closed
   Write-Host "$puerto " -ForegroundColor red -nonewline
   $object|Add-Member -MemberType NoteProperty -Name $puerto -Value "closed"
   }
  }
 }#fin foreach puerto
write-host ""
$objects+=$object
}#fin foreach maquina
$objects|out-file "$scriptPath\portscan.log" -append
"-" * 60|out-file "$scriptPath\portscan.log" -append

Comentarios
Publicar un comentario