You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取Espressif设备连接的MQTT服务器地址

如何获取Espressif设备连接的MQTT服务器地址

首先,你当前只能看到ARP广播是因为普通网卡只会接收发给自己的数据包或者广播包,而Espressif设备和路由器之间的单播流量默认不会传到你的Windows机器上。下面给你两种靠谱的方法来获取MQTT服务器地址,优先推荐第一种,因为更直观准确:

方法一:DD-WRT端口镜像 + Wireshark抓包

这是最直接的方式,通过路由器把Espressif设备的流量镜像到你的Windows机器,让Wireshark能抓到完整的设备通信包:

  1. 配置DD-WRT端口镜像

    • 登录你的DD-WRT路由器后台(访问192.168.0.1
    • 找到「Services」或「Advanced」菜单下的「Port Mirroring」(不同DD-WRT版本位置可能略有差异,找不到的话可以搜下你路由器型号的端口镜像设置路径)
    • 源端口选择Espressif设备对应的接口:如果是有线连接,选它插的那个LAN口;如果是无线连接,选无线接口(一般叫wl0
    • 目标端口选你的Windows机器连接路由器的LAN口
    • 保存设置,必要时重启路由器(有些版本不需要重启,但重启能确保设置生效)
  2. 用Wireshark分析流量

    • 打开Wireshark,选择Windows机器连接路由器的那张网卡
    • 设置过滤规则:输入 mqtt 或者更精准的 tcp port 1883 or tcp port 8883(MQTT默认端口是1883,加密MQTT用8883),这样就能只显示MQTT相关的流量
    • 重启你的Espressif设备触发它发起MQTT连接(如果设备本来就会自动重连,等着就行)
    • 找到MQTT的CONNECT报文,里面的「Server Name」字段就是MQTT服务器的域名;如果是加密MQTT(TLS)看不到这个字段,就看TCP握手的SYN包,目标IP就是服务器的IP,你可以在Windows命令行里用nslookup [目标IP]查到对应的域名

方法二:直接用DD-WRT的日志或流量监控

如果不想折腾抓包,也可以通过路由器的日志或流量统计直接获取设备的出站连接信息:

  1. 启用防火墙日志记录MQTT连接

    • 登录DD-WRT后台,进入「Administration」->「Commands」
    • 输入以下两条命令(针对你的Espressif设备IP 192.168.0.145):
      iptables -I FORWARD -s 192.168.0.145 -p tcp --dport 1883 -j LOG
      iptables -I FORWARD -s 192.168.0.145 -p tcp --dport 8883 -j LOG
      
    • 点击「Save Firewall」保存规则
    • 然后进入「Administration」->「Logs」,选择「Firewall」日志,就能看到设备发起的到1883/8883端口的连接记录,里面会明确显示目标IP地址
  2. 用流量统计查看连接

    • 进入「Status」->「Bandwidth」,切换到「Connections」标签
    • 找到源IP为192.168.0.145的出站连接条目,看目标端口是1883或8883的那条,对应的目标IP就是MQTT服务器

补充说明

如果你的Espressif设备用了非标准的MQTT端口,那上面的过滤规则和防火墙日志命令里的端口号要改成对应的数值;另外如果是加密MQTT(TLS),Wireshark无法解密的话就只能通过TCP目标IP反查域名啦。

备注:内容来源于stack exchange,提问作者vico

火山引擎 最新活动