3 linux_server_port

vi /usr/local/zabbix_agent/sbin/discovertcpport.sh
#!/bin/bash
portarray=(`netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
#namearray=(`netstat -tnlp|egrep -i "$1"|awk {'print $7'}|awk -F'/' '{if ($NF != "Address") print $NF}'|uniq`)
length=${#portarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
# printf "\"{#TCP_NAME}\":\"${namearray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"

使用netstat命令输出端口号;-tnlp=Tcp协议+不显示别名+listen状态+显示程序名称;$1~$9表示输出的第几个参数;
awk {'print $4'}表示输出第4个参数(如0.0.0.0:80);awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}表示截取冒号后面的值,
且只能是0~9的数字;|sort|uniq表示排序和去重。
脚本中注释掉的两行是用来监控服务的,只需替换掉其上的一行就是个扫描服务的脚本了。
客户端增加discovery的key
UnsafeUserParameters=1
UserParameter=tcpportlisten,/usr/local/zabbix_agent/sbin/discovertcpport.sh
重启zabbix服务
测试 ./discovertcpport.sh
客户端扫描端口命令
netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'
客户端扫面服务命令
netstat -tnlp|egrep -i "$1"|awk {'print $7'}|awk -F'/' '{print $NF}'

在Linux模板中创建端口自动发现规则
name : tcp port discover
key : tcpportlisten

创建原型item
name: tcp port $1
key : net.tcp.listen[{#TCP_PORT}]
data type boolean

创建触发器
name: Tcp prot {#tcp_port}Status
{template os linux.net.tcp.listen[{#TCP_PORT}].last(0)#1


创建图像原型
name tcp port{#TCP_PORT}
posted @ 2016-12-16 16:57  onlylc  阅读(402)  评论(0)    收藏  举报