netstat 中的 grep 正则表达式端口范围

netstat 中的 grep 正则表达式端口范围

在我的 netstat 输出中,我想提取32000-64000.我已经尝试过egrep "^[3,4,5,6]",但我需要从 开始32000。我应该使用awk某种脚本吗?

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:*

答案1

正如netstat已弃用的那样,为什么不尝试它的高级后继者ss.

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

答案2

awk解决方案:

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

您的情况的输出将如下:

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:]]+|:'- 字段分隔符

  • NR>2 && $5>=32000 && $5<=64000- 检查端口号是否在所需范围内


选择埃格雷普解决方案:

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}- 将涵盖从32000到 的数字59999

  • 6[0-3][0-9]{3}|64000- 将涵盖从60000到 的数字64000

相关内容