嵌入式系统使用tcpdump抓mqtt的包

1、抓包命令:

tcpdump -i any -n -w mqtt_packets.pcap 'tcp port 1883'

或者

tcpdump -i any -n -w /tmp/$(date +%Y%m%d_%H%M%S).pcap 'tcp port 1883'

解释:

  • -i any 表示在所有网络接口上抓包。

  • -n 表示不解析主机名(加速抓包过程)。

  • 'tcp port 1883' 是 tcpdump 的过滤表达式,表示只抓取目标或源端口为 1883 的 TCP 数据包。MQTT 默认端口是 1883。

  •  -w 参数, 将抓取的数据包保存到文件中mqtt_packets.pcap或者以当前年月日为标题的文件中,格式如"20240826_152954.pcap",文件名还可以带路径。

2、举例说明:

抓包命令如下图所示,tcpdump在/usr/sbin目录下,并且具有足够权限,全下如下图所示:

使用上述命令会进行抓包,想停止抓包,直接按键盘ctrl+c即可;

即会在当前目录下生成抓包文件,如下图所示:

把文件下载下来,可以用wireshark打开并进行过滤,可以使用mqtt直接过滤,看到topic的具体描述,如下图所示:

3、注意事项

有时候明明很确认网卡上有包,但是tcpdump就是抓不到那些包,则可能是发送包是SSL加密的,但是tcpdump没有对SSL的支持;如要使用tcpdump抓取SSL加密的数据包,你需要确保tcpdump编译时包含了对SSL的支持。

在Linux中,要检查一个进程是否包含SSL支持,可以通过检查进程的内存映射来查看是否加载了SSL库,如libssl。你可以使用cat命令配合/proc文件系统来查看进程的内存映射。以下是一个示例命令,用于检查PID为1234的进程是否加载了SSL库:

cat /proc/1234/maps | grep libssl

如果该命令返回了包含libssl字样的行,那么表示该进程包含对SSL的支持。

举例如下,如图可知系统中的tcpdump不支持SSL加密,而CspBu_client包含对SSL的支持。

若你的tcpdump支持SSL,并且你有SSL流量的私钥,则可以使用如下命令抓取数据包, 你可以使用tcpdump-r选项来指定一个密钥文件,其中/path/to/keyfile.pem是私钥文件的路径:

tcpdump -i any -w /tmp/mqtt_$(date +%Y%m%d_%H%M%S).pcap -r /path/to/keyfile.pem 'tcp port 1883' 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值