77 lines
2.6 KiB
Bash
77 lines
2.6 KiB
Bash
#!/bin/bash
|
|
# 抓 Legged_sport 真实 LowCmd → 解密 → 跟本地脚本生成的对比
|
|
#
|
|
# 前提: Legged_sport 必须在跑且正常向 MCU 发包 (狗在工作状态, 不能是idle)
|
|
# 用法: bash tools/onboard/diff_real_lowcmd.sh [seconds]
|
|
#
|
|
# 输出:
|
|
# data/lowlevel_captures/real_lowcmd_<ts>.pcap - 抓的原包
|
|
# data/lowlevel_captures/real_lowcmd_<ts>.bin - 一帧密文 (616B)
|
|
# data/lowlevel_captures/real_lowcmd_dec_<ts>.bin - 解密后 (616B)
|
|
# 字节级 diff 输出到屏幕
|
|
|
|
PI_HOST="${PI_HOST:-192.168.123.161}"
|
|
PI_USER="${PI_USER:-pi}"
|
|
DURATION="${1:-3}"
|
|
TS=$(date +%Y%m%d_%H%M%S)
|
|
|
|
PCAP_REMOTE=/tmp/real_lowcmd.pcap
|
|
PCAP_LOCAL=data/lowlevel_captures/real_lowcmd_${TS}.pcap
|
|
CIPHER_BIN=data/lowlevel_captures/real_lowcmd_${TS}.bin
|
|
PLAIN_BIN=data/lowlevel_captures/real_lowcmd_dec_${TS}.bin
|
|
|
|
mkdir -p $(dirname ${PCAP_LOCAL})
|
|
|
|
echo "============================================"
|
|
echo "🔍 抓真实 LowCmd 跟本地对比"
|
|
echo "============================================"
|
|
echo ""
|
|
|
|
# 0. 确认 Legged_sport 在发包 (而不是 idle)
|
|
echo "[0/4] 确认 Legged_sport 在向 MCU 发包..."
|
|
COUNT=$(ssh ${PI_USER}@${PI_HOST} \
|
|
"sudo timeout 1 /usr/sbin/tcpdump -i any -nn -c 5 'udp and dst host 192.168.123.10 and dst port 8007' 2>/dev/null | grep -c 'IP 192' || true")
|
|
if [ "$COUNT" -lt 1 ]; then
|
|
echo " ❌ Legged_sport 没在发 LowCmd!"
|
|
echo " 可能原因:"
|
|
echo " - 狗在 idle/damping 待机, 需要遥控器唤醒 (L2+A 让它站起来)"
|
|
echo " - MCU 被其他客户端 (我们 Mac 的脚本) 抢占了"
|
|
echo " - sportMode 服务挂了"
|
|
exit 1
|
|
fi
|
|
echo " ✅ 检测到 ${COUNT} 个发往 MCU 的包"
|
|
echo ""
|
|
|
|
# 1. 抓包
|
|
echo "[1/4] tcpdump 抓 ${DURATION}s ..."
|
|
ssh ${PI_USER}@${PI_HOST} bash -s <<EOF
|
|
set +e
|
|
sudo rm -f ${PCAP_REMOTE}
|
|
sudo timeout ${DURATION} /usr/sbin/tcpdump -i any -w ${PCAP_REMOTE} -s 0 -n \
|
|
'udp and dst host 192.168.123.10 and dst port 8007' 2>/tmp/tcpdump.log
|
|
sudo chmod 644 ${PCAP_REMOTE}
|
|
echo "pcap 大小: \$(stat -c%s ${PCAP_REMOTE}) 字节"
|
|
EOF
|
|
|
|
# 2. 拉回
|
|
echo ""
|
|
echo "[2/4] 拉回本地..."
|
|
scp ${PI_USER}@${PI_HOST}:${PCAP_REMOTE} ${PCAP_LOCAL}
|
|
echo " ✅ ${PCAP_LOCAL}"
|
|
|
|
# 3. 解析+解密+对比
|
|
echo ""
|
|
echo "[3/4] 解析+解密..."
|
|
conda run -n free_dog_sdk python tools/onboard/_compare_lowcmd.py \
|
|
${PCAP_LOCAL} \
|
|
--cipher-out ${CIPHER_BIN} \
|
|
--plain-out ${PLAIN_BIN}
|
|
|
|
echo ""
|
|
echo "============================================"
|
|
echo "完成. 文件:"
|
|
echo " pcap: ${PCAP_LOCAL}"
|
|
echo " 密文: ${CIPHER_BIN}"
|
|
echo " 明文: ${PLAIN_BIN}"
|
|
echo "============================================"
|