使用NKE嗅探HTTP数据包

Abc*_*Efg 2 macos network-programming packet-sniffers kernel-extension

我正在尝试通过使用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");
Run Code Online (Sandbox Code Playgroud)

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

pmd*_*mdj 5

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");
Run Code Online (Sandbox Code Playgroud)