mitmdump 自定义脚本输出 TLS 数据

mitmdump 自定义脚本输出 TLS 数据

为什么有这个需求?


有一个客户在使用我们开发的 AMQP 库连接 Azure 的服务。 然后发现在消息被客户端成功的接受之后,被移动到了 Dead Letter Queue。

本人在使用 Azure 官方的 SDK 之后,发现官方库是没有这样的问题。 那么,毫无疑问,搞清楚为什么人家是正常工作的,问题不就迎刃而解了嘛。

但是,问题来了,整个流程使用了 TLS 加密,没办法通过 Wireshark 抓包来看到它所发送的明文的 AMQP 数据。


怎么办?


尝试了使用官方 SDK 的日志功能,但是日志均是应用程的信息,没有这么底层的数据信息。

查看能不能输出 SSL Key Log 文件,依然没找到文档说它们支持这个功能。

没办法了吗?

不,肯定有办法。 那就是使用 TLS 代理了。


使用 mitmdump


尝试了 mitmweb 这个工具,但是很不幸。它无法输出比较大数据量的二进制数据(> 5Mb)。

再次尝试 mitmdump, 它确实可以输出到文件。 但是它把数据以文本形式进行输出, 而我们的数据是二进制的。 因此,还不能用。

最终,发现它还支持自定义脚本,这个是可行的。

这里分享一下我所使用的脚本

# save as script.py
import logging
import re

from mitmproxy import http

f = open('C:\\.mitmproxy\\bin.bin', 'w') # tls 数据最终存在这个文件里

def websocket_message(flow: http.HTTPFlow):
    assert flow.websocket is not None  # make type checker happy
    # get the latest message
    message = flow.websocket.messages[-1]

    # was the message sent from the client or server?
    if message.from_client:
        logging.info("Client sent a message")
        logging.info(bytes.hex(message.content))
        f.write("\r\n --> ")
        f.write(bytes.hex(message.content))
    else:
        logging.info("Server sent a message: ")
        logging.info(bytes.hex(message.content))
        f.write("\r\n <-- ")
        f.write(bytes.hex(message.content))
 

如何使用:

mitmdump -s save.py -w test.log

最终的日志文件中就包含了 SDK 实际发送的​ AMQP 协议的数据包。 将里面的 hex 编码的二进制数据转成 hex dump格式,就可以直接导入到 Wireshark 中查看明文数据包​结构了


END!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VFSSoft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值