【问题标题】:Sniff HTTP packets using NKE使用 NKE 嗅探 HTTP 数据包
【发布时间】:2012-10-21 16:00:24
【问题描述】:

我正在尝试通过使用 NKE 制作 KEXT 来读取 http 请求和响应。我注册了一个套接字过滤器,每当我获取数据时,我都会使用如下代码打印 mbuf:

unsigned char *dataString = mbuf_data(*data);
for (size_t i = 0; i < mbuf_len(*data); i++)
{
    printf("%c", dataString[i]);
}
printf("\n-------------\n");

我可以从日志中读取 http 请求和一些响应数据,但看不到任何 HTML 内容。 我想知道是我没有正确读取 mbuf 还是其他问题?

【问题讨论】:

标签: macos network-programming packet-sniffers kernel-extension


【解决方案1】:

mbufs 实际上是内存缓冲区的链接列表,因此如果您只检查列表的头部,这可能就是您看不到所有数据的原因。你想做这样的事情:

for (mbuf_t mb = *data; mb; mb = mbuf_next(mb))
{
  unsigned char* dataString = mbuf_data(mb);
  size_t len = mbuf_len(mb);
  for (size_t i = 0; i < len; i++)
  {
    printf("%c", dataString[i]);
  }
}
printf("\n-------------\n");

【讨论】:

  • 感谢您的回答,我可以通过这种方式看到一些 html 标签,但仍然不是完整的 html 代码,例如我看不到任何 或没有任何下载事件数据.对我来说最重要的部分是找到下载事件。
  • 您是否考虑了Content-Encoding HTTP 响应标头?如果这是deflategzip,那么主体将被压缩,因此您需要解压缩数据流来检查它。我不知道您所说的“下载事件”是什么意思,请说的更具体些。
  • 我没有关注 Content-Encoding 感谢您提到它。我正在尝试读取 HTTP 请求和响应,以了解浏览器何时开始下载,将下载链接传递给另一个应用程序并通过操作这些数据包来阻止浏览器中的下载。
  • 任何具有标头Content-Disposition: attachment; … 的HTTP 响应绝对是下载。不过,并非所有下载都有该标题,因此您必须维护浏览器无法自行打开的Content-Type: 值列表(例如application/octet-stream)。不过,您可能会遇到 AJAX 请求的问题。一般来说,我会建议使用浏览器扩展来代替。 (更简单,更不容易出错)
  • 感谢您的回复。编写浏览器扩展是我尝试的第一件事,但不幸的是它们非常有限。例如,无法通知 Safari 扩展程序有关下载的信息。以这种方式捕获下载还需要另一件事,我应该能够跟踪对特定 HTTP 请求的 HTTP 响应,以便找到我认为可以通过存储请求并使用 TCP 标头中的序列号来跟踪它们的下载 url。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
相关资源
最近更新 更多