shell脚本tcpdump抓取数据解析执行关机指令

百度ai写了一个脚本


#!/bin/bash
# 组播监听关机脚本
# 功能:捕获特定组播数据包(53 48 55 54 44 4F 57 4E FF)时执行关机

MCAST_GROUP="239.255.255.250"
MCAST_PORT=1900
SHUTDOWN_HEX="53 48 55 54 44 4F 57 4E FF"

# 检查root权限
if [ "$(id -u)" -ne 0 ]; then
    echo "请使用root权限运行此脚本" >&2
    exit 1
fi

# 安装依赖
if ! command -v tcpdump &> /dev/null; then
    echo "正在安装tcpdump..."
    apt-get install -y tcpdump || yum install -y tcpdump
fi

# 主监听函数
start_monitoring() {
    echo "开始监听组播地址 ${MCAST_GROUP}:${MCAST_PORT}..."
    tcpdump -i any -X -nn "dst ${MCAST_GROUP} and udp port ${MCAST_PORT}" | \
    while read -r line; do
        if [[ $line =~ $SHUTDOWN_HEX ]]; then
            echo "检测到关机指令!"
            shutdown -h now
            exit 0
        fi
    done
}

# 异常处理
trap 'echo "监听已停止"; exit 0' INT TERM

start_monitoring

结果发现抓不到数据,最终排查到tcpdump命令 "dst xxx"这里不需要,直接改用端口就行

tcpdump -i eth0  port ${MCAST_PORT} -X -nn

且测试时发现 用any任意端口有时正常,有时不正常,直接写网口名才行

且后面读取解析的数据也不行,百度了没有找到如何用tcpdump的输出数据做为read的读取输入

改用保存文件形式,且tcpdump命令不自动退出,只能手动退出

后面查到用-c 又发现问题 -c 1> output.txt也有问题,直接提示tcpdump的用法,这里要写成

-c 1 > output.txt才行,

最终脚本写成

#!/bin/bash
# 组播监听关机脚本
# 功能:捕获特定组播数据包(53 48 55 54 44 4F 57 4E FF)时执行关机

MCAST_GROUP="232.10.40.0"
MCAST_PORT=28000
FILE="output.txt"

# 检查root权限
#if [ "$(id -u)" -ne 0 ]; then
#    echo "请使用root权限运行此脚本" >&2
#    exit 1
#fi

# 安装依赖
#if ! command -v tcpdump &> /dev/null; then
#    echo "正在安装tcpdump..."
#    apt-get install -y tcpdump || yum install -y tcpdump
#fi

# 主监听函数
start_monitoring() {
    echo "开始监听组播地址 ${MCAST_GROUP}:${MCAST_PORT}..."
    tcpdump -i eth0  port ${MCAST_PORT} -XX -nn -c 1 > $FILE
    cat $FILE
sleep 5
    grep "REBOOT" $FILE 
    if [ $? -eq 0 ]; then
        echo "检测到重启指令!"
            reboot
            exit 0
    else
        echo "检测到关机指令!"
            shutdown -h now
            exit 0
    fi
}

# 异常处理
#trap 'echo "监听已停止"; exit 0' INT TERM

start_monitoring

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值