掃描主機端口-Shell Script

Hachibye
Mar 30, 2023

--

掃描主機端口並列出運行在上面的服務

腳本主體
將常見或指定的端口編輯到對應文件內,例如: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

--

--

Hachibye
Hachibye

Written by Hachibye

字幕組退休勞工 ... DevOps/系統/雲端/資安

No responses yet