【问题标题】:Given a text representation of a MIME message, how can I recreate the message?给定 MIME 消息的文本表示,我如何重新创建该消息?
【发布时间】:2013-08-29 07:12:16
【问题描述】:

我有一个 GDB 核心转储,其中包含 MIME 多部分/表单数据请求消息的标头和正文。我需要以某种方式准确地重新创建消息并将其发送到我的服务器,以便我可以调试我的代码崩溃的原因。

消息来自一个相当标准的表单数据页面。所有的内容类型都是 text/plain,除了一个是 image/jpeg。

问题是正文的二进制部分已经有了边界,所以我不能只提取二进制部分并通过内置的 Python MIME 代码自动生成标题。

再次,我需要准确地重新创建初始消息。最简单的方法是什么?

【问题讨论】:

  • 你是什么意思“身体的二进制部分已经有边界”? email.parser.Parser().parsestr(text) 将正确解析具有多部分边界的多部分 MIME 消息。您可以创建一个简单的示例并将其上传到某个地方吗?或者显示您使用的不起作用的代码,以及回溯(或者如果不是异常,则说明失败的地方)?
  • 另外,您所说的“最初的消息到底是怎样的”是什么意思?它可能最初是一堆单独的文件,然后是 Web 浏览器使用的某种内部格式的某种东西(或 Python 的 email.mime 库,或一些 PHP 库,或其他),然后是 RFC2822文本 MIME 附件。最后一个正是你已经拥有的;前面的没有意义。
  • 让我尝试一个不同的问题:确切地说,您拥有的数据与您想要的数据有何不同?
  • 好的,所以我使用 GDB 创建了正文的二进制转储。我最初使用以下 python 脚本:code import requests # ... # filepath = 'C:\binbin' url = '9.19.145.251:8080' files = {'file': ('userfile', open('binbin' , 'rb'))} data = {'account_id': 'root'} headers = {'content-type': 'multipart/form-data'} res = requests.post(url, files=files, data=data ,标题=标题)code。问题是二进制转储不是原始数据。从捕获时开始,它就已经有了标题和边界。

标签: python tcp mime-types mime


【解决方案1】:

我可能会使用netcat:

$ nc -q 5 serverhost 80 < message_file.txt

【讨论】:

  • 请仔细阅读问题。我不能亲自发送 MIME 消息——我只有一个包含它的 GDB 核心转储。所以,我有消息的原始标题和正文,都是文本格式。我需要接受这些并生成/发送完全相同的新消息。我已经知道如何使用 TCPDump 捕获流量。另外,我在 Netcat 中找不到对“-q”选项的单一引用。
  • 谢谢@user1765354。我确实非常仔细地阅读了这条消息。我读到 GDB 核心映像“包含 MIME 多部分/表单数据请求消息的标头和正文”。如果你有标题和正文,你还需要什么?
  • 来自我的 ubuntu 12.04 系统的 man nc 手册页:“-q 在标准输入上的 EOF 之后,等待指定的秒数然后退出。如果 seconds 为负数,永远等下去。”
猜你喜欢
  • 2020-12-31
  • 2011-03-17
  • 2013-06-07
  • 2016-06-26
  • 2018-06-01
  • 1970-01-01
  • 2016-03-11
  • 2023-03-22
  • 2013-07-12
相关资源
最近更新 更多