掃描主機端口並列出運行在上面的服務
腳本主體
將常見或指定的端口編輯到對應文件內,例如:80 443 22 3306
#!/bin/bash
# 定义端口文件的路径
PORT_FILE="/path/to/ports.txt"
# 扫描端口状态
for port in $(cat $PORT_FILE); do
# 检查端口状态
nc -z -w 1 127.0.0.1 $port > /dev/null 2>&1
if [ $? -eq 0 ]; then
# 列出运行在对应端口上的服务
echo "Port $port is open, running service:"
lsof -i :$port
fi
done
如果不想指定端口,遍歷所有端口
#!/bin/bash
# 定義需要掃描的主機
HOST="127.0.0.1"
# 定義需要掃描的端口範圍
PORT_START=1
PORT_END=100
# 遍歷每個端口
for ((port=$PORT_START; port<=$PORT_END; port++)); do
# 使用nc命令進行端口掃描,並將輸出定向到/dev/null以隱藏終端輸出
nc -z -w3 $HOST $port >/dev/null 2>&1
# 檢查nc命令的退出狀態,如果為0則端口開啟
if [ $? -eq 0 ]; then
echo "Port $port is open."
# 使用lsof命令查找運行在該端口上的服務
service=$(lsof -i :$port | grep -v "PID" | awk '{print $1}')
if [ -n "$service" ]; then
echo "Service running on port $port: $service"
fi
fi
done
加入crtontab定時任務
crontab -e
添加以下(每月5號的中午12點執行)
0 12 5 * * /path/to/scan_ports.sh
題外話:
如果需要手動列出指定的進程(不指定參數會太大,不太直接下lsof指令)
lsof -c java -c httpd