La lógica de filtrado netstat incluye/excluye en PowerShell

La lógica de filtrado netstat incluye/excluye en PowerShell

Actualmente, usamos algo de lógica en PowerShell para netstat -anoobtener todos los resultados de TCP y UDP y filtrar los resultados que no necesitamos ver y luego exportarlos a un CSV. Queremos que los resultados sólo incluyanESCUCHANDOy(blanco)yIP sin loopback.

Un ejemplo sería netstat -ano | Where-Object{$_ -notlike '*127.?.?.?*' -and $_ -notmatch '\[::1]' -and $_ -notmatch 'TIME_WAIT' -and $_ -notmatch 'CLOSE*' -and $_ -notmatch 'ESTABLISHED' -and $_ -notmatch 'SYN_*' -and $_ -notmatch 'FIN_*'}.

Sin embargo, no queremos perdernos las otras opciones que pueden aparecer en otros momentos si estamos ejecutando nuestro script al mismo tiempo. Uno que acabo de encontrar esÚLTIMO_ACKy no sé qué otras opciones hay que nuestra lógica no incluya ya.

¿Hay alguna manera de cambiar esa lógica en lugar de filtrar todas esas coincidencias? ¿Podemos incluir solo coincidencias que sean(blanco)oESCUCHANDOoIP sin loopback? Si no, puedo agregar más a esa lógica, pero solo quería ver las opiniones de algunos de los expertos.

RESPUESTA: Encontré todos los estados.aquíy simplemente lo actualicé para incluirlos todos.

Respuesta1

No reinventes la rueda cuando no sea necesario. Es posible que cualquier pregunta legítima ya se haya formulado y respondido varias veces y de muchas maneras en toda la web. Es posible que no encuentre una respuesta absoluta en una búsqueda y es posible que deba buscar usando una(s) cadena(s) diferente(s), una coincidencia de cadena, una coincidencia de cadena exacta, una coincidencia de cadena parcial, una coincidencia específica del sitio, etc.

Ejemplo: 'filtro de powershell netstat'

Golpes)

Get-NetworkStatistics - netstat -ano con filtrado

Este código toma prestado de la función Get-NetworkStatistics de Shay Levy. Esta función ejecuta netstat -ano en un sistema local o remoto y filtra los resultados por nombre de proceso, dirección, puerto, protocolo o estado, si se especifica. Los nombres de los procesos se extraen para cada PID mediante get-process.

https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71

Descargar:https://gallery.technet.microsoft.com/scriptcenter/Get-NetworkStatistics-66057d71/file/68504/10/Get-NetworkStatistics.ps1

Úselo tal cual o modifíquelo según sea necesario.

Respuesta2

Aquí tienes una manera de lidiar con lo que creo que quieres... convertir las líneas de texto en objetos PoSh que puedas filtrar como quieras. Este es un código antiguo que escribí hace 3 o 4 años.

Que hace ...

  • guarda el resultado de una netstatllamada a $Var
  • limpia las líneas no deseadas
  • convierte cada línea en una línea CSV
  • convierte la colección de líneas CSV en una matriz de objetos PoSh
  • muestra la colección
  • muestra la .PIDpropiedad del objeto 0

el código ...

$Raw_Result = netstat -a -o -n

# get rid of the unwanted 1st three lines
$Raw_Result = $Raw_Result | Select-Object -Skip 3
# remove the `---` line
$Raw_Result = $Raw_Result | Select-String -Pattern '[^---]'

$Cleaned_Result = foreach ($Line in $Raw_Result)
    {
    $Line = $Line.ToString().Trim()
    if ($Line[53] -eq ' ')
        {
        $Line = $Line.Insert(53, '-NA-')
        }
    $Line = $Line -replace ' {2,}', ','

    $Line
    }


$Final_Result = $Cleaned_Result | ConvertFrom-Csv


#$Raw_Result
#$Cleaned_Result
$Final_Result
Write-Output ''
$Final_Result[0].PID

salida truncada...

Proto           : UDP
Local Address   : [::]:55356
Foreign Address : *:*
State           : -NA-
PID             : 3352

[*...snip...*] 

Proto           : UDP
Local Address   : [fe80::d129:4be7:98da:e357%14]:53382
Foreign Address : *:*
State           : -NA-
PID             : 3908


1308

El beneficio de todo ese trabajo es que ahora tiene una colección de objetos bastante estándar fáciles de ordenar o filtrar. [sonrisa]

Respuesta3

encontré todos los estadosaquíy lo acabo de actualizar para incluir el ÚLTIMO y ahora están todos allí. Son los siguientes a continuación:

CLOSE_WAIT, CERRADO, ESTABLECIDO, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, SYN_RECEIVED, SYN_SEND y TIME_WAIT.

información relacionada