range de puerto grep regex de netstat

En mi salida netstat, quiero extraer el range de puertos entre 32000-64000 . He intentado egrep "^[3,4,5,6]" pero necesito comenzar desde 32000 . ¿Debo usar awk o algún tipo de script?

 Linux# netstat -nau Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 10.0.0.20:55238 0.0.0.0:* udp 0 0 10.0.0.20:55240 0.0.0.0:* udp 0 0 10.0.0.20:31242 0.0.0.0:* udp 0 0 10.0.0.20:55244 0.0.0.0:* udp 0 0 10.0.0.20:32246 0.0.0.0:* udp 0 0 10.0.0.20:55248 0.0.0.0:* udp 0 0 10.0.0.20:12250 0.0.0.0:* udp 0 0 10.0.0.20:19252 0.0.0.0:* 

awk solución:

 netstat -nau | awk -F'[[:space:]]+|:' 'NR>2 && $5>=32000 && $5<=64000' 

La salida en su caso sería como:

 udp 0 0 10.0.0.20:55238 0.0.0.0:* udp 0 0 10.0.0.20:55240 0.0.0.0:* udp 0 0 10.0.0.20:55244 0.0.0.0:* udp 0 0 10.0.0.20:32246 0.0.0.0:* udp 0 0 10.0.0.20:55248 0.0.0.0:* 

  • -F'[[:space:]]+|:' – separador de campo

  • NR>2 && $5>=32000 && $5<=64000 – comtesting si el número de puerto está en el range necesario


Solución alternativa egrep :

 netstat -nau | egrep ':(3[2-9]|[45][0-9])[0-9]{3}|6[0-3][0-9]{3}|64000' 
  • (3[2-9]|[45][0-9])[0-9]{3} – cubrirá numbers del 32000 al 59999

  • 6[0-3][0-9]{3}|64000 – cubrirá numbers desde 60000 hasta 64000

Como netstat está en desuso, ¿por qué no probar su sucesor superior, ss .

 ss -nau '( sport >= 32000 and sport <= 64000 )'