您现在的位置是:首页 > 随手笔记网站首页随手笔记
Ubuntu 自动识别网段下监控设备上传后台保存
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 "============================================="下一篇:已经是最后一篇
相关文章
文章评论 (0)
- 这篇文章还没有收到评论,赶紧来抢沙发吧~

