您现在的位置是:首页 > 随手笔记网站首页随手笔记

Ubuntu 自动识别网段下监控设备上传后台保存

  • 小鑫
  • 2026-05-13 00:32:18
  • 82 次阅读
Ubuntu 自动识别网段下设备在线#!/bin/bash read -p "请输入网段前三段(例:192.168.1):" net read -p "请输入设备密码(直接回车=不修改密码):" INPUT_PASSWORD tmp=$(m...
Ubuntu 自动识别网段下设备在线
#!/bin/bash
read -p "请输入网段前三段(例:192.168.1):" net

read -p "请输入设备密码(直接回车=不修改密码):" INPUT_PASSWORD

tmp=$(mktemp)
result="ping_camera_result.txt"
green='\033[32m'
red='\033[31m'
end='\033[0m'

UPLOAD_URL="http://hik.jinggu.net/oa/camera.php"
DEVICE_USERNAME="admin"
USER_REMARK="扫描自动录入"

# ? 最大并发数(改小就变慢、更稳;建议 5~10)
MAX_CONCURRENT=5

check_brand(){
local ip="$1"
nc -z -w 10 "$ip" 8000 && echo "海康摄像头" && return
nc -z -w 10 "$ip" 37777 && echo "大华摄像头" && return
nc -z -w 10 "$ip" 554 && echo "其他摄像头" && return
echo "普通网络设备"
}

get_mac(){
    MAC=$(ip link show $(ip route get 1.1.1.1 | awk '{print $5}') | awk '/link\/ether/ {print $2}')
    echo $MAC | tr '[:lower:]' '[:upper:]'
}

upload_device(){
    local ip="$1"
    local brand="$2"
    local delay="$3"
    local mac=$(get_mac)
    [ -z "$mac" ] && return

    pass_param=""
    if [ -n "$INPUT_PASSWORD" ]; then
        pass_param="$INPUT_PASSWORD"
    fi

    # ? 每个上传加 0.1 秒间隔,避免PHP压力过大
    sleep 0.1

    curl -s -X POST "$UPLOAD_URL" \
      -d "mac=$mac" \
      -d "device_type=$brand" \
      -d "ip=$ip" \
      -d "username=$DEVICE_USERNAME" \
      -d "password=$pass_param" \
      -d "remark=$USER_REMARK" \
      -d "delay=$delay" > /dev/null 2>&1
}

echo "============================================="
echo "  扫描 $net.1~254 | 上传至 hik.jinggu.net"
echo "  密码模式:$( [ -n "$INPUT_PASSWORD" ] && echo '已输入密码' || echo '不修改密码' )"
echo "  并发限制:$MAX_CONCURRENT (稳定上传模式)"
echo "============================================="

> "$tmp"

# ? 用并发控制,一次最多跑 MAX_CONCURRENT 个
for i in {1..254}; do
    # 限制并发数
    while [[ $(jobs -r -p | wc -l) -ge $MAX_CONCURRENT ]]; do
        sleep 0.2
    done

    (
    ip="$net.$i"
    ping_out=$(ping -c3 -W10 "$ip" 2>/dev/null | grep 'time=' | tail -1)
    if [ -n "$ping_out" ]; then
      delay=$(echo "$ping_out" | awk -F'time=' '{print $2}' | awk '{print $1}')
      brand=$(check_brand "$ip")
      upload_device "$ip" "$brand" "$delay"
      echo "$ip | ✅ | 延时:$delay ms | 设备:$brand" >> "$tmp"
      echo -e "${green}$ip | ✅ | 延时:$delay ms | 设备:$brand${end}"
    else
      echo "$ip | ❌ | 超时无响应" >> "$tmp"
      echo -e "${red}$ip | ❌ | 超时无响应${end}"
    fi
    )&
done
wait

online=$(grep -c "✅" "$tmp"); offline=$(grep -c "❌" "$tmp")
hik=$(grep -c "海康" "$tmp"); dahua=$(grep -c "大华" "$tmp")
cam=$(grep -c "其他摄像" "$tmp"); normal=$(grep -c "普通网络设备" "$tmp")

cat > "$result" << EOF
=============================================
              扫描汇总结果
=============================================
  在线设备:$online 台 | 离线设备:$offline 台
---------------------------------------------
  海康:$hik 台 | 大华:$dahua 台
  其他摄像:$cam 台 | 普通设备:$normal 台
  密码处理:$( [ -n "$INPUT_PASSWORD" ] && echo '已更新密码' || echo '未修改密码' )
=============================================
详细记录:
EOF
sort -t '.' -k4,4n "$tmp" >> "$result"; rm -f "$tmp"

echo -e "\n============================================="
echo -e "✅ 扫描完成!| 密码模式:$( [ -n "$INPUT_PASSWORD" ] && echo '\033[32m已设置新密码\033[0m' || echo '\033[33m不修改密码\033[0m' )"
echo "? 结果已保存到:$result"
echo "? 查看列表:$UPLOAD_URL?List"
echo "============================================="


TAG: Ubuntu

上一篇:Ubuntu安装巡查监控客户端(endpoint)

下一篇:已经是最后一篇

文章评论 (0)

    • 这篇文章还没有收到评论,赶紧来抢沙发吧~


Top