检查已建立的端口

检查已建立的端口

我用来检查端口是否已建立的命令是否错误?

count=$(netstat -an | awk '$4 ~ /:'"$PORT"'$/ && $6 == "ESTABLISHED" {print $0}'| wc -l)

并视其为$count > 0既定事实?

答案1

我不确定您说的“将 $count > 0 视为已建立?”是什么意思,但这看起来像是到给定端口的有效已建立连接数。您可能希望限制到给定的接口或协议(这样两个不同的服务在同一端口上监听但使用不同的接口时就不会混淆)。

此外,您还可以稍微简化命令:

count=$(netstat -an | awk -v port=":$PORT\$" '$4 ~ port && $6 == "ESTABLISHED" {count++} END {print count}')

您也可以使用lsoflsof -i :$PORT将列出该端口上的打开的连接,并且您可以使用-n(类似于)和选项(-n仅列出 PID、文件描述符编号和 TCP 状态)使其更容易解析:netstat-F T

lsof -ni ":$PORT" -FT | grep -c TST=ESTABLISHED

答案2

你的方法似乎有效,但不太优雅。我宁愿这样做:

if [[ "$(LANG=C netstat -nt | awk -F" +|:" '/ESTABLISHED/{print$5}')" =~ "$PORT" ]]; then
  echo $PORT established
else
  echo $PORT not established
fi

命令替换只是打印已建立的主机列表,而不管用户的区域设置如何,条件表达式测试是否$PORT在此列表中,then如果是则执行列表,else如果不在则执行列表。

相关内容