当前位置: 首页 > news >正文

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 ]; thenecho "请使用root权限运行此脚本" >&2exit 1
fi# 安装依赖
if ! command -v tcpdump &> /dev/null; thenecho "正在安装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; doif [[ $line =~ $SHUTDOWN_HEX ]]; thenecho "检测到关机指令!"shutdown -h nowexit 0fidone
}# 异常处理
trap 'echo "监听已停止"; exit 0' INT TERMstart_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 > $FILEcat $FILE
sleep 5grep "REBOOT" $FILE if [ $? -eq 0 ]; thenecho "检测到重启指令!"rebootexit 0elseecho "检测到关机指令!"shutdown -h nowexit 0fi
}# 异常处理
#trap 'echo "监听已停止"; exit 0' INT TERMstart_monitoring

http://www.dtcms.com/a/315159.html

相关文章:

  • Javascript面试题及详细答案150道之(031-045)
  • ES集群调优策略
  • NetBSD notes[1]
  • Redis 常用数据结构以及单线程模型
  • 力扣热题100------21.合并两个有序链表
  • Redis分布式锁简单实现
  • 安卓的NDK、ABI、JNI到底是指啥?区别与联系是?
  • Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
  • Ollama入门实战
  • ES集群规划与调优
  • Matlab(1)
  • 蓝桥杯----AT24C02
  • 【Git】怎么将https://coding.net的仓库迁移至https://cnb.cool/
  • 拉格朗日松弛算法求解VRP(Vehicle Routing Problem)车辆路径问题和简单示例
  • Linux的进程管理与监控和任务工具crontab的使用
  • 臭氧、颗粒物和雾霾天气过程的大气污染物计算 CAMx模型
  • 用思维框架拆解知识,开启高效学习之旅
  • 【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal
  • RabbitMQ--介绍
  • 498. 对角线遍历
  • JUCE VST AI 开源
  • 2025最好的Dify入门到精通教程(上)
  • 微服务的编程测评系统10-竞赛删除发布-用户管理-登录注册
  • 县级融媒体中心备份与恢复策略(精简版3-2-1架构)
  • 【网络安全】不安全的反序列化漏洞
  • P1550 [USACO08OCT] Watering Hole G
  • 【达梦MPP(带主备)集群搭建】
  • python包管理器uv踩坑
  • Golang中的`io.Copy()`使用场景
  • Java 的 APT(Annotation Processing Tool)机制详解