用于验证特定端口上正在运行的服务的脚本

用于验证特定端口上正在运行的服务的脚本

我有任务要做。

我必须搜索以下端口是否有正在运行的服务。
端口 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 )' 

相关内容