![使用 Netstat 仅计算已建立、TIME_WAIT 和已关闭等待连接的脚本](https://linux22.com/image/71396/%E4%BD%BF%E7%94%A8%20Netstat%20%E4%BB%85%E8%AE%A1%E7%AE%97%E5%B7%B2%E5%BB%BA%E7%AB%8B%E3%80%81TIME_WAIT%20%E5%92%8C%E5%B7%B2%E5%85%B3%E9%97%AD%E7%AD%89%E5%BE%85%E8%BF%9E%E6%8E%A5%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我正在尝试制作一个脚本(使用 Perl,但不是必需的),该脚本将仅计算系统上的已建立、Time_Wait 和 Closed_Wait 连接的数量,并在终端中打印它们。到目前为止,我发现我可以使用:
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
为了打印所有连接,但是当我从脚本运行它时,它不会在终端中打印,并且它还给了我一些我不寻找的连接,例如 Listen 和foreign。它必须只显示Established、Time_Wait 和Closed_Wait 的原因是因为该脚本正在由监视程序使用,如果出现任何其他连接类型,该脚本就会失败。有人可以提出建议吗?谢谢!
答案1
可以稍微修改您的脚本以仅处理您需要的状态:
netstat -ant | awk '/ESTABLISHED|LISTEN|CLOSE_WAIT/ {print $6}' | \
sort | uniq -c | sort -n
进一步的步骤是对所有带有 的内容awk
,例如:
netstat -ant | awk '
/ESTABLISHED|LISTEN|CLOSE_WAIT/ {count[$6]++}
END {
for(s in count) {
printf("%12s : %6d\n", s, count[s]);
}
}'
答案2
计算行数:
netstat -nat | egrep 'ESTABLISHED|TIME_WAIT|CLOSE_WAIT' | wc -l
仅打印这些行:
netstat -nat | egrep 'ESTABLISHED|TIME_WAIT|CLOSE_WAIT'