繁体   English   中英

C libcurl - 是否可以以原始格式获取请求数据

[英]C libcurl - Is it possible to get request data in raw format

在 Libcurl C 中,使用 CURLOPT_DEBUGFUNCTION 我可以设置回调函数。 Libcurl 调用回调并提供数据

  1. CURLINFO_HEADER_IN
  2. CURLINFO_HEADER_OUT
  3. CURLINFO_DATA_IN
  4. CURLINFO_DATA_OUT
  5. CURLINFO_SSL_DATA_IN
  6. CURLINFO_SSL_DATA_OUT

为 CURLINFO_SSL_DATA_OUT 提供的 tx 数据采用二进制格式(加密)。 我需要相应的原始数据(未加密)。

是否可以?

如果您想查看实际传输的内容,我建议您使用中间人 HTTPS 代理。

代理位于您的客户端和服务器之间。

当客户端通常通过 HTTPS 与服务器通信时,客户端会检查服务器的证书链以查看它是否由系统信任的根证书签名。

因此,客户端和服务器之间的任何代理只能转发数据,而无法查看加密的数据流。

那么它是如何工作的呢?

中间人代理拦截流量并即时创建服务器证书。 所以它在客户端看来就好像它正在与服务器通信,反之亦然。

但是,如果客户端随后评估证书链,它会遇到它不知道因此不信任的代理的根证书,并立即终止服务器通信(如果客户端配置正确)。

为了让代理可以查看 HTTPS 数据,您必须在客户端系统上的受信任根证书列表中包含代理根证书。

然后代理可以显示包括标题在内的所有数据。

此类代理的一些典型代表是(不完整列表):

不同的方法有不同的优点和缺点。 当您想要快速有效地分析请求和响应(包括标头)时,HTTPS 代理特别有用。

带有 libcurl 程序的 mitmproxy 演示

对于快速演示,可以使用来自 libcurl 站点的示例程序: https ://curl.se/libcurl/c/simple.html:

gcc -o simple simple.c -lcurl
export https_proxy=localhost:8080

在另一个终端窗口中,可以启动 mitmproxy。 程序启动时,请求/响应出现在mitmproxy中,可以进行分析。

它看起来像这样:

演示

如上所述,您需要按照 mitmproxy 网站上的说明为不同的操作系统配置适当的根证书。

我强烈建议使用SSLKEYLOGFILE方法,该方法允许您使用 Wireshark 等外部工具监视和捕获所有 curl 流量(TLS 和非 TLS)。

无需在任何地方安装任何 MITM 软件或额外的证书。 也适用于链接到使用 libcurl 的应用程序,而不仅仅是 curl 本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM