mqtt - 如何根据 tcpdump 中的主题名称过滤 MQTT 流量
问题描述
我正在使用以下命令捕获 MQTT 流量以进行故障排除
tcpdump -i team0 -w mqtt-trace.pcap src 10.x.x.x
但它会在几分钟内产生非常大的文件,我可以根据主题名称过滤 tcpdump
以下是 tcp 有效负载,我希望它只捕获具有PKGCTRL/1/status/frequency
或者如果 tcpdump 可以直接支持应用层协议(如wireshark)上的过滤器的有效负载mqtt.topic == PKGCTRL/1/status/frequency
0000 00 13 95 36 2e ef 00 10 7e 07 87 3d 08 00 45 00 ...6....~..=..E.
0010 00 77 2e 0d 40 00 40 06 f6 78 0a 0b 80 f3 0a 0b .w..@.@..x......
0020 80 f2 c3 6a 75 83 e4 f8 f7 7a 0a 89 67 76 50 18 ...ju....z..gvP.
0030 ea 60 59 f8 00 00 30 4d 00 1a 50 4b 47 43 54 52 .`Y...0M..PKGCTR
0040 4c 2f 31 2f 73 74 61 74 75 73 2f 66 72 65 71 75 L/1/status/frequ
0050 65 6e 63 79 0a 11 09 c2 7a 85 14 d0 71 37 16 12 ency....z...q7..
0060 06 08 01 10 01 18 00 12 1c 0a 0d 09 0b 46 25 75 .............F%u
0070 02 f2 48 40 10 21 18 00 11 00 60 76 14 d0 71 37 ..H@.!....`v..q7
0080 16 20 00 28 00 . .(.
解决方案
正如@hardillb 建议的那样,请改用 tshark 。由于 tshark 的架构,你不能同时写一个文件作为一个显示过滤器(它会太慢)。
要获取您需要的信息,它看起来像这样
$ tshark -i team0 -f "src 10.x.x.x" \
-Y "mqtt.topic == PKGCTRL/1/status/frequency" -T fields -e mqtt.topic
-i team0
: 过滤界面team0
-f "src 10.x.x.x"
: 使用捕获过滤器,和 tcpdump 的过滤一样。这将加快处理速度,因为它比显示过滤器(下一个项目符号)更快。-Y "mqtt.topic == PKGCTRL/1/status/frequency"
:过滤与此显示过滤器匹配的数据包-T fields -e mqtt.topic
:只输出mqtt.topic
字段,因为那是目标信息。
-T fields
将输出由换行符垂直分隔的列数据。它不会被水平分隔,因为只有列,但默认是\t
.
推荐阅读
- java - 在线程上用java播放音乐
- java - 如何处理无效输入
- sql - 如何在 IF 条件下检查 Query 是否为空?
- python - 如何根据模式从 2D NumPy 数组中提取 2D NumPy 子数组?
- r - 删除重复的行,选择要保留的特定值
- javascript - nodejs push 不是一个函数
- sql - 计算收到特定电子邮件的所有人员的百分比
- vba - 在没有问题后收到“运行时错误 '2293':Microsoft Access 无法发送此电子邮件”
- regex - PowerShell正则表达式:在多行的两个字符串之间捕获字符串
- javascript - Bootstrap Tagsinput如何将多个值作为数组获取