我有任务要做。
我必须搜索以下端口是否有正在运行的服务。
端口 53 和 55
如果没有,我必须发送警报。
请更正以下代码中一个端口的逻辑和语法
ntstat=`netstat -tulpn | grep :53 | grep LISTEN | awk {'print $4'}`
port="*:53"
#Just to echo for testing
echo $ntstat
echo $port
if [[ "$ntstat" == "$port" ]];
then
echo " X Service at port number $port"
else
echo " Port is not listing "
fi
输出 :
127.0.1.1:53
*:53
Port is not listing
我正在努力匹配字符串(127.0.1.1:53 到 *:53)
答案1
53
要检查端口(或)上是否有正在运行的服务,55
我建议使用以下优化解决方案:
port=":53"
if netstat -tulpn | grep --line-buffered -q "$port .*LISTEN"; then
echo " X Service at port number $port"
else
echo " Port is not listing "
fi
答案2
您还可以text-processing
对当前输出执行 a 以匹配端口。只需添加sed -e 's/.*:/:/g'
#!/bin/bash
ntstat=`netstat -tulpn | grep ":53 " | grep LISTEN | awk {'print $4'} | sed -e 's/.*:/:/g'`
port=":53 "
#Just to echo for testing
echo $ntstat
echo $port
if [[ "$ntstat" == "$port" ]]
then
echo " X Service at port number $port"
else
echo " Port is not listing "
fi
请注意,我在端口号后面添加了一个空格,以避免其他端口包含53
由于这是bash
运算符,因此您必须将 shebang 放在#!/bin/bash
脚本的最顶部,因此当您执行脚本 as 时./portlisten.sh
,它将把解释器视为/bin/bash
,如果您执行脚本为$ bash portlisten.sh
答案3
不要使用,netstat
因为这是一个已弃用的命令,请改用ss
。
在你的情况下,你可以使用类似的东西:
ss -H -o state listening '( sport = :53 or sport = :55 )'