Docker部署Mosquitto Broker遇畸形数据包问题,求定位源设备IP
定位Mosquitto畸形数据包来源IP的排查方案
1. 解析Wireshark抓包数据
- 用过滤规则
mqtt筛选抓包中的MQTT流量,再叠加条件ip.src == 172.18.5.1锁定异常数据包 - 查看异常数据包的TCP源端口,结合以下方式反向追踪:
- 执行
docker ps查看所有容器的端口映射,匹配抓包中的源端口,定位对应容器 - 若流量来自主机,执行
sudo lsof -i :<异常源端口>,查看监听该端口的进程
- 执行
2. 强化Mosquitto日志细节
修改mosquitto.conf,开启全量连接日志:
log_type all connection_messages true log_timestamp true
重启Mosquitto容器后,重点查看日志中来自172.18.5.1的连接信息,关注:
- 连接请求的
clientid字段(若客户端已配置) - 连接对应的TCP端口,结合容器端口映射缩小范围
3. 排查Docker网关转发的流量
网关172.18.5.1是Docker网桥的主机侧IP,异常流量可能来自主机或网桥内容器:
- 检查主机上的MQTT相关进程:
ps aux | grep mqtt,排查异常进程 - 遍历Docker网络内所有容器的网络活动:
# 先获取网络名称,替换下方的<your-network> docker network inspect <your-network> | grep -E "IPv4Address|Name" # 逐个检查容器的MQTT连接状态 for container in $(docker ps -q); do echo "容器名: $(docker inspect $container --format '{{.Name}}') IP: $(docker inspect $container --format '{{.NetworkSettings.Networks.<your-network>.IPAddress}}')" docker exec $container netstat -tulpn | grep -E "ESTABLISHED|LISTEN" | grep mqtt done - 检查是否有容器端口映射到主机后,被异常进程占用
4. 临时隔离验证
- 暂时停止可疑容器,观察40秒内是否仍出现错误日志,若错误消失则可确认该容器为问题来源
- 若怀疑主机进程,可临时停止对应进程,验证错误是否终止
内容的提问来源于stack exchange,提问作者salvq
相关产品推荐
相关产品推荐

